Sobes.tech
Junior — Middle

V čem spočívá rozdíl mezi anotací @Escaping a standardními funkcemi v programovacím jazyce?

sobes.tech AI

Odpověď od AI

Poznámka @escaping ve Swiftu (jazyku iOS) se používá k označení, že uzávěr (closure) může být volán po opuštění funkce, do které byl předán.

Ve výchozím nastavení jsou uzávěry ve Swiftu považovány za ne-escaping, což znamená, že musí být volány uvnitř těla funkce. Pokud je uzávěr uložen například jako vlastnost nebo je volán asynchronně později, je třeba jej označit jako @escaping.

To je důležité pro správu paměti a prevenci úniků, protože @escaping uzávěry mohou zachytit self a vyžadují explicitní použití self. uvnitř.

Příklad:

func performAsyncTask(completion: @escaping () -> Void) {
    DispatchQueue.global().async {
        // Asynchronní práce
        completion() // volání po opuštění funkce
    }
}

Tímto způsobem se @escaping liší od standardních (non-escaping) uzávěrů tím, že umožňuje uzávěru žít déle než dobu běhu funkce a být volán později.