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
Taskde 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
- Concurrence structurée et fonctions asynchrones
- async let, Task et annulation
- try await et propagation des erreurs