web-dev-qa-db-fra.com

Comment imprimer les détails d'une exception "catch all" dans Swift?

Je mets à jour mon code pour utiliser Swift, et je me demande comment imprimer les détails de l'erreur pour une exception qui correspond à la clause 'catch all'. J'ai légèrement modifié l'exemple à partir de ceci Swift Language Guide Page pour illustrer mon propos:

do {
    try vend(itemNamed: "Candy Bar")
    // Enjoy delicious snack
} catch VendingMachineError.InvalidSelection {
    print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
    print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let amountRequired) {
    print("Insufficient funds. Please insert an additional $\(amountRequired).")
} catch {
    // HOW DO I PRINT OUT INFORMATION ABOUT THE ERROR HERE?
}

Si j'attrape une exception inattendue, je dois pouvoir enregistrer quelque chose sur sa cause.

77
markdb314

Je viens de le comprendre. J'ai remarqué cette ligne dans la Swift Documentation:

Si une clause catch ne spécifie pas de modèle, la clause correspond et lie toute erreur à une constante locale nommée error

Alors, j'ai essayé ceci:

do {
    try vend(itemNamed: "Candy Bar")
...
} catch {
    print("Error info: \(error)")
}

Et ça m'a donné une belle description.

112
markdb314

De Le langage de programmation Swift:

Si une clause catch ne spécifie pas de modèle, la clause correspond et lie toute erreur à une constante locale nommée error.

C'est-à-dire qu'il existe un implicite let error Dans la clause catch:

do {
    // …
} catch {
    print("caught: \(error)")
}

Alternativement, il semble que let constant_name Soit également un modèle valide. Vous pouvez donc l'utiliser pour renommer la constante d'erreur (cela pourrait être pratique si le nom error est déjà utilisé):

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}
42
Arkku