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.