Junior — Middle
É necessário usar um mecanismo de escape para closures passadas como argumentos de uma função?
sobes.tech IA
Resposta da IA
Em Swift, os closures por padrão são não-escape, ou seja, eles não podem ser armazenados nem chamados após a conclusão da função na qual são passados.
Se for necessário guardar e chamar o closure mais tarde (por exemplo, em uma chamada assíncrona, callback), ele deve ser marcado como @escaping.
Exemplo:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// algum trabalho
completion() // chamando o closure mais tarde
}
}
Se o closure for usado apenas dentro da função e não for armazenado, @escaping não é necessário.
Portanto, o mecanismo de escaping deve ser usado somente quando o closure pode ser chamado após a saída da função na qual foi passado.