Junior — Middle
Je třeba použít mechanismus escape pro uzávěry předávané jako argumenty funkce?
sobes.tech AI
Odpověď od AI
V Swiftu jsou uzávěry ve výchozím nastavení non-escaping, což znamená, že je nelze uložit ani zavolat po dokončení funkce, do které jsou předány.
Pokud je potřeba uzávěr uložit a zavolat později (například v asynchronním volání, callbacku), je třeba jej označit jako @escaping.
Příklad:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// nějaká práce
completion() // zavoláme uzávěr později
}
}
Pokud je uzávěr použit pouze uvnitř funkce a není uložen, není potřeba @escaping.
Tudíž je třeba používat escaping mechanismus pouze tehdy, když může být uzávěr zavolán po opuštění funkce, do které byl předán.