0Pricing
Swift Academy · Leçon

try await et propagation des erreurs

Utilisez try await avec des fonctions asynchrones susceptibles de lever des erreurs, gérez les échecs avec do/catch et propagez proprement les erreurs vers les appelants, notamment CancellationError .

try await et propagation des erreurs est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 3 leçons au total.

Pourquoi try await ?

try await appelle une fonction asynchrone qui peut lever une erreur. Si elle lève une erreur, celle-ci est propagée, sauf si vous l’interceptez. Vous pouvez aussi utiliser try? pour convertir le résultat en Optional.

Asynchrone avec erreurs + do/catch

Créez une fonction asynchrone qui peut lever une erreur et appelez-la avec try await dans un bloc do/catch pour gérer les échecs.

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

Conversion des erreurs

Utilisez try? pour obtenir un Optional au lieu de lever une erreur. Évitez try!, sauf si vous êtes certain que l’opération ne peut pas échouer.

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

Remontée des erreurs

Marquez les appelants avec async throws pour propager les erreurs vers le haut ; elles pourront être traitées à une frontière supérieure.

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

Interceptions spécifiques

Utilisez des blocs catch avec filtrage par motif. Traitez d’abord CancellationError pour que les chemins d’arrêt restent rapides et silencieux.

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

Recommandations

Conseils :

  • Propagez avec try jusqu’à une frontière capable de décider (interface utilisateur, CLI ou Task de niveau supérieur).
  • Préférez les erreurs métier (énumérations) pour plus de clarté.
  • Convertissez avec try? uniquement lorsqu’une absence est acceptable.
  • Interceptez CancellationError distinctement.

Gestion des erreurs avec try await

Vérification rapide : que fait try await f() en cas d’erreur ?

Récapitulatif

Récapitulatif : utilisez try await avec les fonctions asynchrones qui peuvent lever des erreurs, faites remonter les erreurs depuis les fonctions auxiliaires, convertissez-les avec try? lorsqu’une valeur optionnelle convient et interceptez explicitement CancellationError.

Questions Fréquemment Posées

La leçon « try await et propagation des erreurs » est-elle gratuite ?

Oui — le texte complet de « try await et propagation des erreurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « try await et propagation des erreurs » ?

Utilisez try await avec des fonctions asynchrones susceptibles de lever des erreurs, gérez les échecs avec do/catch et propagez proprement les erreurs vers les appelants, notamment CancellationError . Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 3.

Combien de temps prend la leçon « try await et propagation des erreurs » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Concurrence structurée et fonctions asynchrones
  2. async let, Task et annulation
  3. try await et propagation des erreurs
← Retour à Swift Academy