Swift Academy · Lektion

try await och felpropagering

Använd try await med asynkrona funktioner som kastar fel, hantera fel med do/catch och propagera fel vidare på ett tydligt sätt (inklusive CancellationError ).

Lektion 3 av 38 steg

try await och felpropagering är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 3 av 3. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 3 lektioner.

Varför try await?

try await anropar en throwing async-funktion. Om den kastar ett fel propageras felet, såvida du inte fångar det. Du kan också använda try? för att omvandla resultatet till Optional.

Throwing async + do/catch

Skapa en throwing async-funktion och anropa den med try await i do/catch för att hantera fel.

enum NetError: Error { case offline; case badStatus(Int) }

func fetchNumber(from ok: Bool) async throws -> Int {
    try await Task.sleep(nanoseconds: 100_000_000)
    if !ok { throw NetError.offline }
    return 7
}

Task {
    do {
        let n = try await fetchNumber(from: true)
        print("value:", n)          // 7
    } catch {
        print("failed:", error)     // handled here
    }
}

Omvandla fel

Använd try? för att få ett Optional i stället för att kasta ett fel. Undvik try! om du inte är säker på att operationen inte kan misslyckas.

Task {
    // try? converts failure to nil
    let maybe = try? await fetchNumber(from: false)
    print("optional result:", String(describing: maybe)) // nil on error

    // ⚠️ try! will crash if an error is thrown — avoid in production
    // let forced = try! await fetchNumber(from: false)
}

Propagera fel uppåt

Markera anropare som async throws för att propagera fel uppåt; de kan hanteras vid en högre gräns.

func loadProfile(ok: Bool) async throws -> String {
    let id = try await fetchNumber(from: ok)   // propagate on error
    return "id:\\(id)"
}

Task {
    do {
        let s = try await loadProfile(ok: true)
        print(s) // "id:7"
    } catch {
        print("propagated:", error)
    }
}

Specifika catch-block

Använd mönstermatchande catch-block. Hantera CancellationError först för att hålla avslutningsvägar snabba och tysta.

enum FileError: Error { case notFound }

func mightCancel() async throws {
    for _ in 0..<5 {
        try Task.checkCancellation()                 // throws CancellationError
        try await Task.sleep(nanoseconds: 30_000_000)
    }
}

Task {
    let t = Task { try await mightCancel() }
    t.cancel()
    do {
        try await t.value
    } catch is CancellationError {
        print("cancelled cleanly")                   // handle cancellation separately
    } catch {
        print("other error:", error)
    }
}

Riktlinjer

Tips:

  • Propagera med try tills du når en gräns som kan fatta beslut, till exempel UI, CLI eller en Task på toppnivå.
  • Föredra domänfel, till exempel enum-värden, för tydlighet.
  • Omvandla med try? endast när det är acceptabelt att resultatet saknas.
  • Fånga CancellationError separat.

Felhantering med try await

Snabb kontroll: Vad gör try await f() med fel?

Sammanfattning

Sammanfattning: Använd try await med throwing async-funktioner, propagera fel uppåt från hjälpfunktioner, omvandla med try? när ett Optional-resultat fungerar och fånga CancellationError uttryckligen.

Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”try await och felpropagering” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”try await och felpropagering”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 3 lektioner.

Vad lär jag mig i ”try await och felpropagering”?

Använd try await med asynkrona funktioner som kastar fel, hantera fel med do/catch och propagera fel vidare på ett tydligt sätt (inklusive CancellationError ). Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 3.

Hur lång tid tar lektionen ”try await och felpropagering”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Strukturerad samtidighet och async-funktioner
  2. async let, Task och avbrytning
  3. try await och felpropagering
← Tillbaka till Swift Academy