Sobes.tech
Junior — Middle

Is het nodig om een escape-mechanisme te gebruiken voor closures die als argumenten aan een functie worden doorgegeven?

sobes.tech AI

Antwoord van AI

In Swift zijn closures standaard non-escaping, dat wil zeggen dat ze niet kunnen worden opgeslagen en worden opgeroepen nadat de functie waarin ze worden doorgegeven is voltooid.

Als je de closure wilt opslaan en later wilt aanroepen (bijvoorbeeld in een asynchrone oproep, callback), moet je deze markeren als @escaping.

Voorbeeld:

func performAsyncTask(completion: @escaping () -> Void) {
    DispatchQueue.global().async {
        // wat werk
        completion() // roep de closure later aan
    }
}

Als de closure alleen binnen de functie wordt gebruikt en niet wordt opgeslagen, is @escaping niet nodig.

Dus, het escaping-mechanisme moet alleen worden gebruikt wanneer de closure kan worden aangeroepen nadat de functie waarin het is doorgegeven is verlaten.