Sobes.tech
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.