0Pricing
Swift Academy · Lektion

Capture-Listen – weak/unowned und Werterfassung

Verwenden Sie Capture-Listen, um zu steuern, wie Closures Referenzen und Werte erfassen: [weak self], unowned und Wertschnappschüsse helfen, Retain Cycles und subtile Fehler zu vermeiden.

Capture-Listen – weak/unowned und Werterfassung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Warum Capture-Listen?

Ziel: Kontrollieren Sie, was und wie eine Closure erfasst. Verwenden Sie [weak self] oder unowned, um Retain-Zyklen zu vermeiden, und erfassen Sie bei Bedarf Wert-Snapshots.

Starkes Capturing = Zyklusrisiko

Escaping- oder gespeicherte Closures behalten erfasste Werte. Wenn Sie hier self stark erfassen, kann ein Retain-Zyklus entstehen.

class Owner {
    var name = "Owner"
    var onDone: (() -> Void)?

    func start() {
        // Strong capture of self can cause a cycle if onDone is stored:
        onDone = {
            print("Done by", self.name) // self captured strongly
        }
    }
}
var o: Owner? = Owner()
o?.start()
// If nothing nils onDone or o, both can keep each other alive.

Muster für schwaches Capturing

Verwenden Sie [weak self], um den Zyklus zu unterbrechen. self ist innerhalb der Closure optional; entpacken Sie es mit guard let oder optionalem Chaining.

class Owner2 {
    var name = "Owner2"
    var onDone: (() -> Void)?

    func start() {
        onDone = { [weak self] in
            guard let self = self else { return }  // safely unwrap optional self
            print("Done by", self.name)
        }
    }
}
let o2 = Owner2()
o2.start()
o2.onDone?()

unowned (vorsichtig verwenden)

unowned setzt voraus, dass self länger lebt als die Closure und nicht optional ist. Verwenden Sie es nur, wenn Sie sicher sind, dass self beim Aufruf nicht nil sein kann.

class Owner3 {
    var onDone: (() -> Void)?
    func work() {
        onDone = { [unowned self] in
            // self must be alive when this runs; otherwise crash
            print("Owner3 still alive")
        }
    }
}
let o3 = Owner3()
o3.work()
o3.onDone?()

Idee des Wert-Snapshots

Mit Capture-Listen können Sie Werte als Snapshot erfassen, zum Beispiel [n = count]. Ohne Liste werden darin enthaltene let-Konstanten dennoch bei der Erstellung erfasst.

var count = 0
let makeLogger: () -> () -> Void = {
    let snapshot = count     // captured by value at creation
    return {
        print("snapshot =", snapshot, "current =", count)
    }
}
count = 10
let logger = makeLogger()
count = 20
logger()   // snapshot = 10, current = 20

Wertbindung in einer Capture-Liste

Verwenden Sie eine Capture-Liste, um bei der Erstellung der Closure einen Snapshot als benannten Wert anzulegen, zum Beispiel [initial = total].

var total = 5
let closure = { [initial = total] in
    print("initial:", initial, " now:", total)
}
total = 9
closure()   // initial uses captured value 5

Grund für weak self

Kurzer Check: Warum fügt man einer gespeicherten oder escapenden Closure [weak self] hinzu?

Zusammenfassung

Zusammenfassung: Verwenden Sie [weak self], um Zyklen zu unterbrechen (self wird optional), unowned nur bei garantiertem Lebenszyklus und Capture-Listen-Bindings, um Wert-Snapshots zu erfassen.

Häufig gestellte Fragen

Ist die Lektion „Capture-Listen – weak/unowned und Werterfassung“ kostenlos?

Ja — der vollständige Text von „Capture-Listen – weak/unowned und Werterfassung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Capture-Listen – weak/unowned und Werterfassung“?

Verwenden Sie Capture-Listen, um zu steuern, wie Closures Referenzen und Werte erfassen: [weak self], unowned und Wertschnappschüsse helfen, Retain Cycles und subtile Fehler zu vermeiden. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 3.

Wie lange dauert die Lektion „Capture-Listen – weak/unowned und Werterfassung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen von Closures und Capturing
  2. Capture-Listen – weak/unowned und Werterfassung
  3. Escaping vs. non-escaping, autoclosures
← Zurück zu Swift Academy