Sobes.tech
Назад к вопросам
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, так как вызывается позже, вне контекста вызова функции.