0Pricing
Swift Academy · Lektion

Reihenfolge mehrerer defer-Blöcke

Verstehen Sie die umgekehrte Ausführungsreihenfolge von defer-Blöcken.

Reihenfolge mehrerer defer-Blöcke ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Mehrere defers

Ein Gültigkeitsbereich kann mehrere defer-Blöcke enthalten. Sie werden alle beim Verlassen des Gültigkeitsbereichs ausgeführt.

func demo() {
    defer { print("A") }
    defer { print("B") }
    print("body")
}
demo()

Umgekehrte Reihenfolge (LIFO)

Zurückgestellte Blöcke werden in der umgekehrten Reihenfolge ihrer Deklaration ausgeführt: Der zuletzt deklarierte Block wird zuerst ausgeführt.

func order() {
    defer { print("1") }
    defer { print("2") }
    defer { print("3") }
    print("start")
}
order()

Warum LIFO

Die LIFO-Reihenfolge entspricht der Verschachtelung von Setup und Teardown: Das zuletzt ausgeführte Setup wird zuerst rückgängig gemacht.

func resources() {
    print("open A")
    defer { print("close A") }
    print("open B")
    defer { print("close B") }
    print("use both")
}
resources()

Mentales Modell eines Stapels

Stellen Sie sich defers als Stapel vor: Jedes defer legt eine Aufgabe ab, und beim Ende des Gültigkeitsbereichs werden sie in umgekehrter Reihenfolge entfernt.

func stack() {
    defer { print("pop first-declared last") }
    defer { print("pop last-declared first") }
    print("push done")
}
stack()

Defers und lokaler Zustand

Jedes defer erfasst die umgebenden Variablen und sieht ihre endgültigen Werte, wenn es ausgeführt wird.

func state() {
    var x = 1
    defer { print("x is", x) }
    x = 42
}
state()

Defers in einer Schleife

Innerhalb einer Schleife registriert und führt jede Iteration ihre eigenen defers am Ende dieser Iteration in LIFO-Reihenfolge aus.

for i in 1...2 {
    defer { print("late", i) }
    defer { print("early", i) }
    print("body", i)
}

Verschachtelte Gültigkeitsbereiche

Defers werden ausgeführt, wenn ihr eigener Gültigkeitsbereich endet. Daher wird das defer eines inneren Blocks vor dem eines äußeren Blocks ausgeführt.

func nested() {
    defer { print("outer defer") }
    do {
        defer { print("inner defer") }
        print("inner body")
    }
    print("outer body")
}
nested()

Vorhersehbares Aufräumen

Die LIFO-Reihenfolge sorgt dafür, dass zusammengehörige Öffnen-/Schließen-Paare ganz natürlich in der richtigen Reihenfolge geschlossen werden.

func files() {
    print("open log")
    defer { print("flush log") }
    print("open db")
    defer { print("disconnect db") }
    print("transaction")
}
files()

Die Reihenfolge lesen

Um die Ausgabe vorherzusagen, lesen Sie die defers von unten nach oben: Das letzte defer im Gültigkeitsbereich gibt zuerst etwas aus.

func quiz() {
    defer { print("one") }
    defer { print("two") }
    print("body runs first")
}
quiz()

Mit return kombinieren

Alle registrierten defers werden auch dann in LIFO-Reihenfolge ausgeführt, wenn die Funktion vorzeitig mit return zurückkehrt.

func early(_ skip: Bool) {
    defer { print("cleanup 1") }
    defer { print("cleanup 2") }
    if skip { return }
    print("full body")
}
early(true)

Bewährte Vorgehensweise

Deklarieren Sie jedes Teardown direkt nach dem zugehörigen Setup und verlassen Sie sich darauf, dass die LIFO-Reihenfolge sie korrekt abwickelt.

func pattern() {
    print("acquire 1")
    defer { print("release 1") }
    print("acquire 2")
    defer { print("release 2") }
    print("work")
}
pattern()

Kurztest

Testen Sie die Reihenfolge von defer.

Zusammenfassung

Mehrere defer-Blöcke werden beim Verlassen des Gültigkeitsbereichs in umgekehrter Reihenfolge (LIFO) ausgeführt: Der zuletzt deklarierte wird zuerst ausgeführt. Dadurch werden verschachtelte Setup-/Teardown-Paare auch bei einer vorzeitigen Rückkehr automatisch in der richtigen Reihenfolge abgewickelt.

func demo() {
    defer { print("1") }
    defer { print("2") }
    print("body")
}
demo()

Häufig gestellte Fragen

Ist die Lektion „Reihenfolge mehrerer defer-Blöcke“ kostenlos?

Ja — der vollständige Text von „Reihenfolge mehrerer defer-Blöcke“ 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 „Reihenfolge mehrerer defer-Blöcke“?

Verstehen Sie die umgekehrte Ausführungsreihenfolge von defer-Blöcken. 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 4.

Wie lange dauert die Lektion „Reihenfolge mehrerer defer-Blöcke“?

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. Funktionsweise von defer
  2. Reihenfolge mehrerer defer-Blöcke
  3. defer zur Ressourcenbereinigung
  4. defer mit Fehlern und vorzeitigen Rückgaben
← Zurück zu Swift Academy