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.