Wie drucke ich Details einer Ausnahme "Alles abfangen" in Swift?

82

Ich aktualisiere meinen Code, um Swift zu verwenden, und frage mich, wie Fehlerdetails für eine Ausnahme gedruckt werden sollen, die der Klausel "catch all" entspricht. Ich habe das Beispiel auf dieser Swift Language Guide-Seite leicht geändert , um meinen Standpunkt zu verdeutlichen:

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

Wenn ich eine unerwartete Ausnahme bekomme, muss ich in der Lage sein, etwas darüber zu protokollieren, was sie verursacht hat.

markdb314
quelle

Antworten:

119

Ich habe es gerade herausgefunden. Ich habe diese Zeile in der Swift-Dokumentation bemerkt:

Wenn eine catch-Klausel kein Muster angibt, stimmt die Klausel mit einem Fehler überein und bindet ihn an eine lokale Konstante mit dem Namen error

Also habe ich das versucht:

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

Und es gab mir eine schöne Beschreibung.

markdb314
quelle
47

Aus der Swift-Programmiersprache :

Wenn eine catchKlausel kein Muster angibt, stimmt die Klausel überein und bindet jeden Fehler an eine lokale Konstante mit dem Namen error.

Das heißt, let errordie catchKlausel enthält Folgendes:

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

Alternativ scheint dies let constant_nameauch ein gültiges Muster zu sein, sodass Sie es zum Umbenennen der Fehlerkonstante verwenden können (dies ist möglicherweise praktisch, wenn der Name errorbereits verwendet wird):

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