0Pricing
Swift Academy · Lektion

Closure-Capture-Listen und [weak self]

Verwenden Sie Capture-Listen, damit Closures Objekte nicht stark erfassen.

Closure-Capture-Listen und [weak self] ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. 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 4 Lektionen.

Willkommen

Closures erfassen Variablen aus ihrem umgebenden Gültigkeitsbereich. Mit Capture-Listen (`[weak self]`, `[unowned self]`, `[value]`) steuern Sie genau, wie diese Erfassungen erfolgen.

Standardmäßig starke Erfassung

```swift var name = "Alice" let greet = { print("Hello, \(name)") } name = "Bob" greet() // "Hello, Bob" — closure sees current value ``` Standardmäßig erfassen Closures *Referenzen* auf Variablen.

Grundlagen der Capture-Listen

```swift var count = 10 let snapshot = { [count] in print(count) } // captures value count = 99 snapshot() // 10 — snapshot of count at capture time ``` Wenn Sie einen Werttyp in `[]` angeben, wird der Wert in dem Moment kopiert, in dem die Closure erstellt wird.

[weak self]-Muster

```swift class API { func fetch(completion: @escaping () -> Void) { ... } } class VC { func load() { api.fetch { [weak self] in guard let self else { return } // self might be nil by now self.updateUI() } } } ```

guard let self mit verlängerter Lebensdauer

Swift 5.3+: Binden Sie `self` innerhalb von guard neu, ohne es zu überschreiben: ```swift { [weak self] in guard let self else { return } // 'self' is now strong within this block doA() doB() doC() } ```

[unowned self]: Wann ist es sicher?

```swift button.addTarget(self, action: #selector(tap), for: .touchUpInside) // If the button's closure is guaranteed not to outlive self: let action: () -> Void = { [unowned self] in self.handleTap() } ```

Mehrere Werte erfassen

```swift let base = 100 let multiplier = 2 let compute = { [base, multiplier] in base * multiplier } print(compute()) // 200 ``` Erfassen Sie mehrere Werte in derselben Liste und trennen Sie sie durch Kommas.

Capture-Liste mit benannten Bindungen

```swift let myService = service // rename in capture list: let handler = { [service = myService] in service.process() } ``` Nützlich, um einen bestimmten Snapshot unter einem neuen Namen zu erfassen.

Escaping und Non-Escaping

• Eine `@escaping`-Closure kann gespeichert und nach der Rückkehr der Funktion aufgerufen werden → Risiko von Zyklen • Eine Non-Escaping-Closure wird vor der Rückkehr der Funktion aufgerufen → kein Risiko eines Zyklus ```swift func apply(_ f: () -> Void) { f() } // non-escaping, no [weak] needed func later(_ f: @escaping () -> Void) { queue.async { f() } } // escaping ```

Probleme bei der Erfassung debuggen

Wenn Sie einen Zyklus vermuten: 1. Fügen Sie der Klasse `deinit { print("deallocated") }` hinzu 2. Navigieren Sie von der Ansicht weg oder setzen Sie die Instanz auf nil 3. Wenn deinit nichts ausgibt → es existiert ein Zyklus Fügen Sie anschließend den Closures dieser Klasse `[weak self]` hinzu.

Kurzer Test

Was bewirkt `[weak self]` in einer Capture-Liste?

Zusammenfassung

Wichtige Erkenntnisse: • Closures erfassen standardmäßig Referenzen • Die Capture-Liste `[value]` kopiert Werttypen zum Erstellungszeitpunkt • `[weak self]` — keine starke Referenz, automatisch nil, verwenden Sie `guard let self` • `[unowned self]` — keine starke Referenz, nicht sicher gegenüber nil • `@escaping`-Closures benötigen Capture-Listen; Non-Escaping-Closures normalerweise nicht Kurs abgeschlossen! Als Nächstes: funktionale Programmierung in Swift.

Häufig gestellte Fragen

Ist die Lektion „Closure-Capture-Listen und [weak self]“ kostenlos?

Ja — der vollständige Text von „Closure-Capture-Listen und [weak self]“ 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 4 Lektionen.

Was lerne ich in „Closure-Capture-Listen und [weak self]“?

Verwenden Sie Capture-Listen, damit Closures Objekte nicht stark erfassen. 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 4 von 4.

Wie lange dauert die Lektion „Closure-Capture-Listen und [weak self]“?

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. Wie ARC Referenzen zählt
  2. Retain Cycles: Ursachen und Erkennung
  3. weak- und unowned-Referenzen
  4. Closure-Capture-Listen und [weak self]
← Zurück zu Swift Academy