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
- Funktionsweise von defer
- Reihenfolge mehrerer defer-Blöcke
- defer zur Ressourcenbereinigung
- defer mit Fehlern und vorzeitigen Rückgaben