defer mit Fehlern und vorzeitigen Rückgaben
Stellen Sie die Bereinigung auch bei Fehlern oder vorzeitigen Rückgaben sicher.
defer mit Fehlern und vorzeitigen Rückgaben 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.
defer wird bei return ausgeführt
Ein defer-Block wird auch dann ausgeführt, wenn die Funktion vorzeitig über return endet.
func check(_ value: Int) {
defer { print("cleanup ran") }
if value < 0 {
print("negative, returning early")
return
}
print("value is", value)
}
check(-5)Aufräumen auf jedem Pfad
Unabhängig davon, welches return ausgeführt wird, läuft das zurückgestellte Aufräumen genau einmal.
func classify(_ n: Int) {
defer { print("done classifying") }
if n == 0 { print("zero"); return }
if n > 0 { print("positive"); return }
print("negative")
}
classify(0)defer wird bei throw ausgeführt
Wenn eine Funktion einen Fehler auslöst, werden registrierte defers weiterhin ausgeführt, während der Gültigkeitsbereich abgewickelt wird.
enum MyError: Error { case bad }
func risky(_ fail: Bool) throws {
defer { print("cleanup on the way out") }
if fail { throw MyError.bad }
print("no failure")
}
try? risky(true)return und throw kombinieren
Unabhängig davon, ob die Funktion normal zurückkehrt oder einen Fehler auslöst, wird dasselbe defer ausgeführt.
enum E: Error { case oops }
func op(_ flag: Bool) throws -> Int {
defer { print("op finishing") }
if flag { throw E.oops }
return 42
}
let r = try? op(false)
print(r ?? -1)Aufräumen vor der Fehlerweitergabe
Das defer wird ausgeführt, bevor der ausgelöste Fehler den Aufrufer erreicht. Dadurch werden die Ressourcen zuerst freigegeben.
enum E: Error { case fail }
func load(_ broken: Bool) throws {
print("open")
defer { print("close") }
if broken { throw E.fail }
print("read")
}
do {
try load(true)
} catch {
print("caught:", error)
}Mit defer absichern
Ein gängiges Muster: Ressource erwerben, das Aufräumen mit defer zurückstellen und anschließend mit guard und vorzeitigen Rückgaben arbeiten, die das Aufräumen trotzdem auslösen.
func process(_ items: [Int]) {
print("start")
defer { print("finished") }
guard !items.isEmpty else {
print("nothing to do")
return
}
print("processing", items.count, "items")
}
process([])defer und Schleifen mit Fehlern
Ein defer innerhalb einer Schleife wird am Ende jeder Iteration ausgeführt, auch wenn eine spätere Anweisung einen Fehler auslöst.
enum E: Error { case stop }
func loop() throws {
for i in 1...3 {
defer { print("end", i) }
if i == 2 { throw E.stop }
print("body", i)
}
}
try? loop()Reihenfolge bei vorzeitiger Rückkehr
Mehrere defers werden auch bei einer vorzeitigen Rückkehr in LIFO-Reihenfolge ausgeführt.
func multi(_ skip: Bool) {
defer { print("A") }
defer { print("B") }
if skip { return }
print("body")
}
multi(true)Bei Fehlern protokollieren
Verwenden Sie defer, um Abschluss oder Fehler auf allen Beendigungspfaden einheitlich zu protokollieren.
enum E: Error { case bad }
func attempt(_ fail: Bool) throws {
var success = false
defer { print("attempt success:", success) }
if fail { throw E.bad }
success = true
}
try? attempt(true)Zustand bei throw wiederherstellen
defer eignet sich ideal, um einen vorübergehend geänderten Zustand wiederherzustellen, wenn eine Operation einen Fehler auslöst.
enum E: Error { case fail }
func transaction(_ fail: Bool) throws {
var inProgress = true
defer { inProgress = false; print("inProgress:", inProgress) }
if fail { throw E.fail }
print("committed")
}
try? transaction(true)Bewährte Vorgehensweise
Verlassen Sie sich für Aufräumarbeiten, die vorzeitige Rückgaben und ausgelöste Fehler überstehen müssen, auf defer, damit kein Beendigungspfad Ressourcen zurücklässt.
enum E: Error { case x }
func safe(_ fail: Bool) throws {
print("acquire")
defer { print("release") }
if fail { throw E.x }
print("use")
}
try? safe(true)Kurztest
Testen Sie defer mit Fehlern und Rückgaben.
Zusammenfassung
defer wird bei jedem Verlassen des Gültigkeitsbereichs ausgeführt, einschließlich einer vorzeitigen Rückgabe mit return und eines ausgelösten Fehlers, und zwar bevor der Fehler weitergegeben wird. Damit ist es der zuverlässige Ort für Aufräumen und das Wiederherstellen des Zustands auf allen Beendigungspfaden, wobei die LIFO-Reihenfolge erhalten bleibt.
func f(_ skip: Bool) {
defer { print("cleanup") }
if skip { return }
print("work")
}
f(true)Häufig gestellte Fragen
Ist die Lektion „defer mit Fehlern und vorzeitigen Rückgaben“ kostenlos?
Ja — der vollständige Text von „defer mit Fehlern und vorzeitigen Rückgaben“ 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 „defer mit Fehlern und vorzeitigen Rückgaben“?
Stellen Sie die Bereinigung auch bei Fehlern oder vorzeitigen Rückgaben sicher. 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 „defer mit Fehlern und vorzeitigen Rückgaben“?
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