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