Sobes.tech
Junior — Middle

O bloco de conclusão é um campo de classe em termos de escaping ou non-escaping?

sobes.tech IA

Resposta da IA

No contexto do desenvolvimento Swift e iOS, um bloco de conclusão, se for um campo de classe (ou seja, armazenado numa propriedade), é considerado um encerramento de escape. Isto deve-se ao fato de que o bloco pode ser chamado após a saída da função na qual foi passado, por exemplo, de forma assíncrona.

Se o bloco de conclusão for passado para uma função e chamado dentro dela de forma síncrona, por padrão, é não-escape.

Exemplo:

class MyClass {
    var completion: (() -> Void)? // encerramento de escape, pois armazenado numa propriedade

    func doSomething() {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            self.completion?() // chamada após atraso
        }
    }
}

Aqui, completion é um encerramento de escape, pois é chamado mais tarde, fora do contexto da chamada da função.