0Pricing
Swift Academy · Ders

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 })  // 14

Hı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 @escaping gerekir
  • 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.

Bu kursun tüm dersleri

  1. Değerleri Başvuruyla Yakalama
  2. Kaçış Kapanışları
  3. Yakalama Listeleri ve Weak Self
  4. Otomatik Kapanışlar
← Swift Academy Sayfasına Dön