Junior — Middle
Szükséges-e escape mechanizmust használni a függvény argumentumaként átadott zárakhoz?
sobes.tech MI
Válasz az MI-től
Swiftben az alapértelmezett zárójelek nem-escaping típusúak, azaz nem tárolhatók és nem hívhatók meg a függvény befejezése után, amelybe átadták őket.
Ha a zárójelet később el akarja tárolni és meghívni (például aszinkron hívásban, callback-ben), akkor @escaping-ként kell megjelölni.
Példa:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// valamilyen munka
completion() // később hívjuk meg
}
}
Ha a zárójel csak a függvényen belül használatos és nem tárolódik, akkor nincs szükség @escaping-re.
Ezért az escaping mechanizmust csak akkor kell használni, amikor a zárójel a függvény elhagyása után is meghívható.