Kaçış Kapanışları
İşlevlerinden daha uzun süre yaşayan kapanışları saklayın.
Kaçış Kapanışları, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Kaçış Yapan ve Kaçış Yapmayan Kapanışlar
Varsayılan olarak bir kapanış parametresi kaçış yapmaz: işlev dönmeden önce çağrılmalıdır. Daha sonra saklanıp çağrılabilecekse onu @escaping ile işaretleyin.
Kaçış Yapmayan Bir Kapanış
Bu kapanış eşzamanlı çalışır ve işlev döndüğünde ortadan kalkar:
func run(_ work: () -> Void) {
work()
}
run { print("done now") } // "done now"@escaping Neden Gereklidir?
Bir kapanışı daha sonra kullanmak üzere saklamak için @escaping gerekir:
var handlers: [() -> Void] = []
func register(_ handler: @escaping () -> Void) {
handlers.append(handler) // escapes the function
}
register { print("later") }
handlers[0]() // "later"Eşzamansız İşle Kaçış
Tamamlama işleyicileri kaçar; çünkü işlev döndükten sonra çalışırlar:
func load(then completion: @escaping (String) -> Void) {
// imagine async work
completion("data")
}
load { result in print(result) } // "data"self Açıkça Belirtilmelidir
Kaçış yapan bir kapanışın içinde, örnek üyelerine erişirken self. ifadesini açıkça yazmalısınız — bu, kapanışın self değerini tutabileceğini hatırlatır.
Kaçış Yapan Kapanışlarda Açık self
Derleyici açık referansı zorunlu kılar:
class Loader {
var name = "L"
func start(_ done: @escaping () -> Void) {
let cb = { print(self.name); done() }
cb()
}
}
Loader().start { print("finished") } // "L" then "finished"Birçok Geri Çağrıyı Saklama
Kaçış yapan kapanışlar, gözlemci listeleri oluşturmanızı sağlar:
class Emitter {
private var listeners: [(Int) -> Void] = []
func on(_ l: @escaping (Int) -> Void) { listeners.append(l) }
func fire(_ v: Int) { listeners.forEach { $0(v) } }
}
let e = Emitter()
e.on { print("got \($0)") }
e.fire(7) // "got 7"Saklanan Bir Kapanış Döndürme
Özelliklerde tutulan kapanışlar kaçış yapar:
class Button {
var action: (() -> Void)?
func setAction(_ a: @escaping () -> Void) { action = a }
}
let b = Button()
b.setAction { print("tapped") }
b.action?() // "tapped"İsteğe Bağlı Kapanışlar Kaçar
İsteğe bağlı bir kapanış parametresi örtük olarak kaçar (Optional ile sarılır); bu nedenle saklanabilir:
func maybe(_ f: (() -> Void)?) {
f?()
}
maybe { print("ran") } // "ran"Bir Görev Dizisine Kaçış
Ertelenmiş işlerden oluşan bir kuyruk, klasik bir kaçış kullanım alanıdır — her kapanış saklanır, sonra çalıştırılır:
var tasks: [() -> Int] = []
func schedule(_ task: @escaping () -> Int) {
tasks.append(task)
}
schedule { 1 + 1 }
schedule { 10 * 2 }
print(tasks.map { $0() }) // [2, 20]Performans Notu
Kaçış yapmayan kapanışlar daha kapsamlı biçimde optimize edilebilir (yığın belleğinde ayırma gerekmez). Mümkün olduğunda kapanışları kaçış yapmayacak şekilde tutun; yalnızca gerçekten saklıyor veya erteliyorsanız kaçmalarına izin verin.
func sum(_ xs: [Int], _ f: (Int) -> Int) -> Int {
xs.reduce(0) { $0 + f($1) } // non-escaping, fast
}
print(sum([1, 2, 3]) { $0 * $0 }) // 14Hızlı Kontrol
Bir kapanış parametresi ne zaman @escaping ile işaretlenmelidir?
Özet
Kaçış yapan kapanışları öğrendiniz:
- Kaçış yapmama varsayılandır; kapanışlar işlev dönmeden önce çalışır
- Bir kapanışı saklamak veya ertelemek için
@escapinggerekir - Kaçış yapan kapanışlarda açıkça
self.erişimi gerekir - İsteğe bağlı kapanış parametreleri örtük olarak kaçar; hız için kaçış yapmayan kapanışları tercih edin
Sırada: yakalama listeleri ve zayıf self var.
Sıkça Sorulan Sorular
“Kaçış Kapanışları” dersi ücretsiz mi?
Evet — “Kaçış Kapanışları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Kaçış Kapanışları” dersinde ne öğreneceğim?
İşlevlerinden daha uzun süre yaşayan kapanışları saklayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Kaçış Kapanışları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.