• Mar 16, 2025

[16/16] Gestion des erreurs

Introduction

En programmation, tout ne se passe pas toujours comme prévu. Un fichier peut être introuvable, une donnée peut être invalide, une opération peut échouer. Dans ces cas-là, il est essentiel de gérer les erreurs intelligemment, sans faire planter toute votre application.

Swift propose un système robuste pour gérer les erreurs, basé sur trois mots-clés : throw, try et do-catch. Ce système vous permet de lancer, attraper, et traiter les erreurs de manière claire et sécurisée.

Dans ce chapitre, vous allez apprendre à :

  • comprendre le principe de la gestion d’erreur,

  • utiliser do, try et catch,

  • créer vos propres types d’erreurs,

  • écrire des fonctions qui peuvent renvoyer des erreurs.


Pourquoi gérer les erreurs ?

Imaginons une application qui télécharge des fichiers. Que se passe-t-il si la connexion internet est coupée ? Si le fichier n’existe pas ? Sans gestion d’erreur, votre app plantera. Avec une bonne gestion, vous pouvez informer l’utilisateur, proposer une solution, ou continuer proprement.


Le système do-try-catch

Voici la syntaxe de base de la gestion d’erreurs en Swift :

do {
    try operationRisquee()
    print("Succès ✅")
} catch {
    print("Une erreur est survenue ❌")
}
  • try : indique que la fonction peut échouer.

  • do : démarre un bloc dans lequel on tente l’opération.

  • catch : capture l’erreur si elle est levée, et permet de la gérer.


Créer un type d’erreur personnalisé

En Swift, une erreur est un type qui conforme au protocole Error. Vous pouvez créer vos propres erreurs avec une énumération :

enum ErreurDeConnexion: Error {
    case pasDeReseau
    case identifiantsInvalides
    case serveurInaccessible
}

Vous venez de créer un type d’erreur personnalisé que vous pouvez maintenant utiliser dans vos fonctions.


Lancer une erreur avec throw

Une fonction qui peut échouer doit être marquée avec le mot-clé throws, et elle peut ensuite lancer une erreur avec throw.

func seConnecter(utilisateur: String, motDePasse: String) throws {
    if utilisateur.isEmpty || motDePasse.isEmpty {
        throw ErreurDeConnexion.identifiantsInvalides
    }
    // Simulation de succès sinon
    print("Connexion réussie !")
}

Gérer l’erreur avec précision

Vous pouvez utiliser plusieurs blocs catch pour traiter chaque cas d’erreur spécifiquement :

do {
    try seConnecter(utilisateur: "", motDePasse: "1234")
} catch ErreurDeConnexion.identifiantsInvalides {
    print("Veuillez vérifier vos identifiants.")
} catch ErreurDeConnexion.pasDeReseau {
    print("Aucune connexion disponible.")
} catch {
    print("Erreur inconnue.")
}

Ce code vous permet d’apporter des réponses précises et adaptées aux différentes erreurs possibles.


Exemple concret : vérifier un mot de passe

Voici un exemple pédagogique d’une fonction qui vérifie un mot de passe et déclenche une erreur si celui-ci ne remplit pas certaines conditions :

enum ErreurMotDePasse: Error {
    case tropCourt
    case pasDeChiffre
}

func verifierMotDePasse(_ motDePasse: String) throws {
    if motDePasse.count < 6 {
        throw ErreurMotDePasse.tropCourt
    }
    if motDePasse.rangeOfCharacter(from: .decimalDigits) == nil {
        throw ErreurMotDePasse.pasDeChiffre
    }
    print("Mot de passe valide ✅")
}

do {
    try verifierMotDePasse("abc")
} catch ErreurMotDePasse.tropCourt {
    print("Le mot de passe est trop court.")
} catch ErreurMotDePasse.pasDeChiffre {
    print("Le mot de passe doit contenir au moins un chiffre.")
}

Résultat :

Le mot de passe est trop court.

Les autres formes de try

try? : transforme l’erreur en valeur optionnelle

let resultat = try? verifierMotDePasse("abc")

Si une erreur est levée, la valeur sera nil. Cela permet d’éviter les do-catch quand une gestion détaillée n’est pas nécessaire.

try! : force l’exécution (à éviter si vous n’êtes pas sûr)

try! verifierMotDePasse("abc123") // Attention : si une erreur est levée, l'app plante

Conclusion

La gestion des erreurs est une compétence essentielle en Swift. Elle vous permet de prévoir les situations inattendues, de maintenir la stabilité de votre application, et d’offrir une meilleure expérience utilisateur.

Dans ce chapitre, vous avez appris à :

  • utiliser do, try et catch pour intercepter les erreurs,

  • créer vos propres types d’erreurs avec une enum,

  • lancer des erreurs avec throw,

  • proposer des messages clairs selon chaque cas.

✅ Une application professionnelle ne se contente pas de fonctionner : elle gère les échecs avec élégance.

0 comments

Sign upor login to leave a comment