Swift Academy · Lektion

Werte per Referenz erfassen

Verstehen Sie, wie Closures den umgebenden Zustand erfassen.

Lektion 1 von 413 Schritte

Werte per Referenz erfassen ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.

Was Closures erfassen

Eine Closure erfasst die Variablen und Konstanten aus dem umgebenden Gültigkeitsbereich, auf die sie zugreift. Erfasste Variablen werden per Referenz gehalten, daher sieht die Closure spätere Änderungen.

Eine Konstante erfassen

Die Closure merkt sich greeting, auch nachdem die Funktion zurückgegeben wurde:

func makeGreeter() -> () -> String {
    let greeting = "Hello"
    return { greeting }
}
let greet = makeGreeter()
print(greet())  // "Hello"

Eine Variable per Referenz erfassen

Da count eine var ist, verändert die Closure bei allen Aufrufen denselben Speicher:

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}
let next = makeCounter()
print(next(), next(), next())  // 1 2 3

Gemeinsamer Speicher

Zwei Closures können dieselbe Variable erfassen und die Änderungen der jeweils anderen sehen:

func makePair() -> (() -> Void, () -> Int) {
    var value = 0
    let inc = { value += 1 }
    let read = { value }
    return (inc, read)
}
let (inc, read) = makePair()
inc(); inc()
print(read())  // 2

Die Erfassung berücksichtigt spätere Änderungen

Die Closure liest beim Aufruf den aktuellen Wert der Variable, nicht den Wert zum Zeitpunkt ihrer Erstellung:

var message = "first"
let show = { print(message) }
message = "second"
show()  // "second"

Referenz- vs. Werterfassung

Standardmäßig wird eine veränderliche Variable per Referenz erfasst. Wenn Sie eine eingefrorene Kopie ihres Werts zum Erstellungszeitpunkt benötigen, führen Sie sie in einer Capture-Liste wie [x] auf.

Einen Wert einfrieren

Eine Capture-Liste kopiert den Wert sofort:

var n = 10
let frozen = { [n] in n }   // copies 10 now
n = 99
print(frozen())  // 10

Jede Closure mit eigenem Zustand

Jeder Aufruf der Factory erzeugt eine neue erfasste Variable:

func counter() -> () -> Int {
    var c = 0
    return { c += 1; return c }
}
let a = counter(), b = counter()
print(a(), a(), b())  // 1 2 1

Erfassung in einer Schleife

Ohne Vorsicht können Closures in einer Schleife dieselbe Variable gemeinsam verwenden. Verwenden Sie eine Capture-Liste, um für jede Iteration einen Snapshot zu erstellen:

var closures: [() -> Int] = []
for i in 1...3 {
    closures.append { [i] in i }
}
print(closures.map { $0() })  // [1, 2, 3]

self in einer Methode erfassen

Eine innerhalb einer Methode erstellte Closure erfasst die umgebende Instanz und kann dadurch später auf Eigenschaften zugreifen und diese verändern:

class Bank {
    var balance = 0
    func deposit() -> () -> Void {
        return { self.balance += 10 }
    }
}
let bank = Bank()
let add = bank.deposit()
add(); add()
print(bank.balance)  // 20

Warum das wichtig ist

Die Erfassung per Referenz ermöglicht Zähler, Akkumulatoren und zustandsbehaftete Callbacks — sie kann aber auch dazu führen, dass eine Closure Objekte am Leben hält. Als Nächstes verwalten wir dies mit Capture-Listen.

func accumulator() -> (Int) -> Int {
    var total = 0
    return { total += $0; return total }
}
let add = accumulator()
print(add(10), add(5))  // 10 15

Kurze Überprüfung

Wie wird eine veränderliche Variable standardmäßig von einer Closure erfasst?

Zusammenfassung

Sie haben die Erfassungssemantik kennengelernt:

  • Closures erfassen referenzierte Variablen aus ihrem Gültigkeitsbereich
  • Veränderliche vars werden per Referenz erfasst — Änderungen und Mutationen werden gemeinsam verwendet
  • Eine Capture-Liste [x] friert zum Erstellungszeitpunkt eine Wertkopie ein
  • Dies ermöglicht Zähler und zustandsbehaftete Callbacks

Als Nächstes: escapende Closures.

Kostenlos starten

Lerne Swift mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
122
Lektionen
409

Häufig gestellte Fragen

Ist die Lektion „Werte per Referenz erfassen“ kostenlos?

Ja — der vollständige Text von „Werte per Referenz erfassen“ 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 „Werte per Referenz erfassen“?

Verstehen Sie, wie Closures den umgebenden Zustand 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 1 von 4.

Wie lange dauert die Lektion „Werte per Referenz erfassen“?

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. Werte per Referenz erfassen
  2. Escaping Closures
  3. Capture-Listen und Weak Self
  4. Autoclosures
← Zurück zu Swift Academy