Swift Academy · Les

defer met fouten en vroegtijdige returns

Zorg ook bij een throw of vroegtijdige return voor opruimwerk.

Les 4 van 413 stappen

defer met fouten en vroegtijdige returns is een gratis Swift Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.

defer wordt uitgevoerd bij return

Een defer-blok wordt ook uitgevoerd wanneer de functie vroegtijdig eindigt via return.

func check(_ value: Int) {
    defer { print("cleanup ran") }
    if value < 0 {
        print("negative, returning early")
        return
    }
    print("value is", value)
}
check(-5)

Opruimen op elk pad

Ongeacht welke return wordt uitgevoerd, wordt het uitgestelde opruimen precies één keer uitgevoerd.

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 wordt uitgevoerd bij throw

Wanneer een functie een fout opwerpt, worden geregistreerde defers nog steeds uitgevoerd terwijl het bereik wordt afgewikkeld.

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 en throw combineren

Of de functie normaal terugkeert of een fout opwerpt, dezelfde defer wordt uitgevoerd.

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)

Opruimen voordat de fout wordt doorgegeven

De defer wordt uitgevoerd voordat de opgeworpen fout de aanroeper bereikt, zodat hulpbronnen eerst worden vrijgegeven.

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)
}

Bewaken met defer

Een veelgebruikt patroon: verkrijg iets, stel het opruimen uit en gebruik daarna guard met vroege terugkeer, die het opruimen toch activeren.

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 en lussen met fouten

Een defer binnen een lus wordt aan het einde van elke iteratie uitgevoerd, zelfs als een latere instructie een fout opwerpt.

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()

Volgorde bij vroegtijdige terugkeer

Meerdere defers worden ook bij een vroegtijdige terugkeer in LIFO-volgorde uitgevoerd.

func multi(_ skip: Bool) {
    defer { print("A") }
    defer { print("B") }
    if skip { return }
    print("body")
}
multi(true)

Registratie bij fouten

Gebruik defer om voltooiing of fouten consistent op alle eindpaden te registreren.

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)

Toestand herstellen bij throw

defer is ideaal om tijdelijke toestand terug te draaien wanneer een bewerking een fout opwerpt.

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)

Beste werkwijze

Vertrouw op defer voor opruimen dat ook bij vroege terugkeer en opgeworpen fouten moet worden uitgevoerd, zodat geen enkel eindpad hulpbronnen laat lekken.

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)

Korte controle

Controleer defer met fouten en return-instructies.

Samenvatting

defer wordt uitgevoerd wanneer elk bereik wordt verlaten, ook bij een vroege return en een opgeworpen fout, voordat de fout wordt doorgegeven. Daardoor is defer de betrouwbare plek voor opruimen en het herstellen van de toestand op alle eindpaden, waarbij de LIFO-volgorde behouden blijft.

func f(_ skip: Bool) {
    defer { print("cleanup") }
    if skip { return }
    print("work")
}
f(true)
Gratis beginnen

Leer Swift met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
122
Lessen
409

Veelgestelde vragen

Is de les “defer met fouten en vroegtijdige returns” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “defer met fouten en vroegtijdige returns”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.

Wat leer ik in “defer met fouten en vroegtijdige returns”?

Zorg ook bij een throw of vroegtijdige return voor opruimwerk. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Swift Academy te beginnen?

Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “defer met fouten en vroegtijdige returns”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Swift Academy?

Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Hoe defer werkt
  2. Volgorde van meerdere defer-blokken
  3. defer voor het opruimen van resources
  4. defer met fouten en vroegtijdige returns
← Terug naar Swift Academy