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.
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.
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éeerror
.
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)")
}