Назад к вопросам
Junior — Middle
74
Является ли completion-блок полем класса с точки зрения escaping или non-escaping?
Ответ от нейросети
sobes.tech AI
В контексте Swift и iOS development, completion-блок, если он является полем класса (то есть хранится в свойстве), считается escaping closure. Это связано с тем, что блок может быть вызван после выхода из функции, где он был передан, например, асинхронно.
Если completion-блок передается в функцию и вызывается внутри неё синхронно, он non-escaping по умолчанию.
Пример:
class MyClass {
var completion: (() -> Void)? // escaping closure, так как хранится в свойстве
func doSomething() {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.completion?() // вызов после задержки
}
}
}
Здесь completion — escaping, так как вызывается позже, вне контекста вызова функции.