Sobes.tech
Junior — Middle

Em que casos na linguagem Swift é necessário aplicar a anotação @escaping para closures?

sobes.tech IA

Resposta da IA

Em Swift, a anotação @escaping aplica-se a closures que podem ser chamadas após a conclusão da função na qual foram passadas. Isto acontece se a closure for guardada para uso posterior, por exemplo, em operações assíncronas ou ao ser armazenada em propriedades.

Exemplo de uma situação em que é necessário usar @escaping:

func performAsyncTask(completion: @escaping () -> Void) {
    DispatchQueue.global().async {
        // Trabalho assíncrono
        completion() // chamada da closure após sair da função
    }
}

Se a closure for chamada dentro da função antes de ela terminar, @escaping não é necessário. Mas se a closure for guardada ou chamada mais tarde, o compilador exige @escaping.

Isto está relacionado com a gestão do tempo de vida da closure e a prevenção de erros de memória.