Swift:
Gestion des erreurs
Comment faire :
Swift utilise la gestion des erreurs avec les blocs do
, try
, et catch
. Jetons un coup d’œil :
enum FileError: Error {
case fileDoesNotExist
case noPermission
}
func readFile(atPath path: String) throws -> String {
// Imaginons que nous avons une logique ici pour vérifier si un fichier existe et si nous avons la permission de le lire
let fileExists = false
let havePermission = true
if !fileExists {
throw FileError.fileDoesNotExist
}
if !havePermission {
throw FileError.noPermission
}
return "Le contenu du fichier va ici"
}
do {
let fileContent = try readFile(atPath: "/chemin/vers/le/fichier")
print(fileContent)
} catch FileError.fileDoesNotExist {
print("Oups ! Fichier non trouvé.")
} catch FileError.noPermission {
print("Ah ! Pas la permission de lire le fichier.")
} catch {
print("Une erreur inconnue s'est produite.")
}
Exemple de sortie :
Oups ! Fichier non trouvé.
Approfondissement
La gestion des erreurs n’a pas toujours été aussi élégante qu’elle l’est maintenant. En Objective-C, vous deviez gérer des pointeurs vers des objets NSError, ce qui était plutôt lourd. Maintenant, nous avons un système plus élégant avec les énumérations Swift et le protocole Error
.
Le throw
de Swift nous permet de signaler que quelque chose a déraillé. Les blocs do
agissent comme des royaumes conscients des erreurs, try
préfixe les appels risqués, et catch
gère les choses si elles tournent mal.
Les optionnels sont une alternative pour les situations qui ne sont pas tout à fait de “statut d’erreur”, mais qui pourraient quand même n’avoir “aucun résultat”. Ils sont un peu comme les variables de Schrödinger—elles ont une valeur ou elles n’en ont pas.
Pour une réelle profondeur, découvrez les types Result
, qui sont des hybrides astucieux entre des modèles de retour habituels et des motifs d’erreur.
Voir Aussi
- Guide Officiel de Gestion des Erreurs Swift : Apple Docs
- Meilleures Pratiques de Gestion des Erreurs Swift : RayWenderlich.com
- Gestion Avancée des Erreurs en Swift : Article Medium