Come stampare i dettagli di un'eccezione "catch all" in Swift?


84

Sto aggiornando il mio codice per utilizzare Swift e mi chiedo come stampare i dettagli dell'errore per un'eccezione che corrisponde alla clausola "catch all". Ho leggermente modificato l'esempio da questa pagina della guida in lingua Swift per illustrare il mio punto:

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?
}

Se rilevo un'eccezione imprevista, devo essere in grado di registrare qualcosa su cosa l'ha causata.

Risposte:


122

L'ho appena capito. Ho notato questa riga nella documentazione Swift:

Se una clausola catch non specifica un modello, la clausola corrisponderà e legherà qualsiasi errore a una costante locale denominata error

Quindi, poi ho provato questo:

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

E mi ha dato una bella descrizione.


47

Dal linguaggio di programmazione Swift :

Se una catchclausola non specifica un modello, la clausola corrisponderà e legherà qualsiasi errore a una costante locale denominata error.

Cioè, c'è un implicito let errornella catchclausola:

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

In alternativa, sembra che let constant_namesia anche un modello valido, quindi potresti usarlo per rinominare la costante di errore (questo potrebbe essere utile se il nome errorè già in uso):

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.