Проверяет знание управления временем жизни замыканий и как это влияет на архитектуру кода.
Non-escaping замыкания выполняются сразу внутри функции. Escaping замыкания сохраняются и вызываются позже, например, после завершения асинхронной операции. Escaping требует явной аннотации @escaping.
Non-escaping:
Выполняется до окончания функции.
Нет необходимости явно помечать.
Escaping:
Замыкание выходит за пределы функции и может быть вызвано позже.
Используется в асинхронных API.
Требует @escaping.
Пример:
// Escaping
func loadData(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// что-то делаем
completion()
}
}// Non-escaping
func doWork(action: () -> Void) {
action()
}Когда использовать:
@escaping нужен при работе с API, таймерами, асинхронным кодом.
Без @escaping — для простых вызовов внутри функции.