Junior — Middle
Vai ir nepieciešams izmantot escape mehānismu funkcijas argumentiem nodotajiem aizslēgumiem?
sobes.tech AI
Atbilde no AI
Swiftā noklusējuma aizvēršanas ir non-escaping, tas nozīmē, ka tās nevar saglabāt un izsaukt pēc funkcijas, kurā tās tika nodotas, pabeigšanas.
Ja ir nepieciešams saglabāt un vēlāk izsaukt aizvēršanu (piemēram, asinhronā izsaukumā, atgriezeniskajā saziņā), to jāmarķē kā @escaping.
Piemērs:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// kāds darbs
completion() // izsauc vēlāk
}
}
Ja aizvēršana tiek izmantota tikai funkcijas iekšienē un netiek saglabāta, @escaping nav nepieciešams.
Tādējādi, escaping mehānisms jālieto tikai tad, ja aizvēršana var tikt izsaukta pēc funkcijas, kurā tā tika nodota, iziešanas.