Menu
Coddy logo textTech

throws et Error

Fait partie de la section Logique et Flux du Journey Swift de Coddy. Leçon 44 sur 56.

Swift gère les erreurs en obligeant les fonctions à déclarer qu'elles peuvent échouer. Le corps de la fonction lève une valeur d'erreur ; l'appelant doit la gérer.

Un type d'erreur est tout ce qui se conforme au protocole intégré Error. La manière la plus simple de déclarer le vôtre est d'utiliser une énumération :

enum InputError: Error {
    case empty
    case tooLong
}

Une fonction lançant une erreur utilise le mot-clé throws dans sa signature et l'instruction throw dans son corps :

func validate(_ s: String) throws -> String {
    if s.isEmpty { throw InputError.empty }
    if s.count > 100 { throw InputError.tooLong }
    return s
}

Vous ne pouvez pas appeler directement une fonction qui lève une erreur, le compilateur vous oblige à gérer l'erreur. La leçon suivante explique comment.

challenge icon

Défi

Facile

Définissez une énumération NumError: Error avec deux cas : negative et tooBig.

Définissez une fonction lançant des erreurs doubleSafely(_ n: Int) throws -> Int qui :

  • Lance .negative quand n < 0
  • Lance .tooBig quand n > 100
  • Sinon, retourne n * 2

Lisez un seul entier depuis stdin. Appelez doubleSafely à l'intérieur d'un bloc do/catch (vous apprendrez la forme exacte lors de la prochaine leçon ; pour l'instant, utilisez ce squelette exact) :

do {
    let result = try doubleSafely(n)
    print("ok: \(result)")
} catch NumError.negative {
    print("negative")
} catch NumError.tooBig {
    print("too big")
} catch {
    print("unknown")
}

Pour l'entrée 10, la sortie est ok: 20. Pour -1, c'est negative. Pour 500, c'est too big.

Essayez vous-même

let n = Int(readLine()!)!

// TODO: enum NumError: Error { case negative, tooBig }
// func doubleSafely(_ n: Int) throws -> Int { ... }
// do { let r = try doubleSafely(n); ... } catch NumError.negative { ... } ...
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux

Entraînez-vous par vous-même : Playground Swift