Menu
Coddy logo textTech

try? et try!

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

Parfois, peu importe l’erreur qu’une fonction a générée : tu veux simplement un résultat ou une valeur de remplacement. Swift propose deux formes abrégées.

try? transforme toute erreur levée en nil. Le résultat est un Optional du type de retour de la fonction :

enum E: Error { case nope }
func risky() throws -> Int { throw E.nope }

let result = try? risky()        // nil
let safe   = (try? risky()) ?? 0 // 0

Associez-le à ?? pour une valeur par défaut en ligne. C’est la version la plus courte de « appeler cette chose, donnez-moi une valeur dans tous les cas ».

try! signifie « Je sais que cela ne va pas throw ». Si cela se produit, votre programme plante. Utilisez-le uniquement lorsque vous pouvez prouver que l'appel est sûr ; dans le code courant, préférez try? avec une solution de repli ou le do/catch complet.

challenge icon

Défi

Facile

Définissez NumError: Error avec un cas bad. Définissez une fonction parseEven(_ s: String) throws -> Int qui lève une erreur et qui :

  • lève .bad lorsque s ne peut pas être analysé comme un Int, ou lorsque la valeur analysée est impaire
  • retourne sinon l’entier analysé

Lisez une seule ligne d’entrée : une liste de chaînes séparées par des virgules. Pour chacune d’elles, utilisez try? suivi de ?? -1 afin d’obtenir soit l’entier pair analysé, soit -1.

Affichez, dans l’ordre, les entiers obtenus, reliés par ,. Ensuite, sur une deuxième ligne, affichez le nombre de valeurs qui correspondent à -1.

Pour l’entrée 4,7,abc,8,11,2, la sortie est :

4,-1,-1,8,-1,2
3

Essayez vous-même

let parts = readLine()!.components(separatedBy: ",")

// TODO: enum NumError; func parseEven(_:) throws -> Int;
// pour chaque part, (try? parseEven(part)) ?? -1
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