Junior — Middle
Bir fonksiyona argüman olarak geçirilen kapanışlar için kaçış mekanizması kullanmak gerekiyor mu?
sobes.tech yapay zeka
AI'dan gelen yanıt
Swift'te, varsayılan olarak kapanışlar non-escaping'tir, yani iletildiği fonksiyon tamamlandıktan sonra saklanamaz ve çağrılamazlar.
Eğer kapanışı saklamak ve daha sonra çağırmak gerekiyorsa (örneğin, asenkron bir çağrıda, geri aramada), onu @escaping olarak işaretlemeniz gerekir.
Örnek:
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// bazı işler
completion() // kapanışı daha sonra çağır
}
}
Eğer kapanış sadece fonksiyon içinde kullanılıyor ve saklanmıyorsa, @escaping gerekmez.
Bu nedenle, escaping mekanizması yalnızca kapanışın, ona iletildiği fonksiyondan çıktıktan sonra çağrılabileceği durumlarda kullanılmalıdır.