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