2015-07-11 10 views
56

Ich aktualisiere meinen Code, um Swift zu verwenden, und ich frage mich, wie Fehlerdetails für eine Ausnahme gedruckt werden, die der Klausel "catch all" entspricht. Ich habe etwas am Beispiel von diesem Swift Language Guide Page modifizierten mein Punkt zu illustrieren:Wie druckt man Details einer 'catch all' Ausnahme in Swift?

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 abfangen, ich brauche etwas zu können, melden Sie sich, was sie verursacht.

Antwort

84

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

Wenn eine catch-Klausel kein Muster angeben, wird die Klausel entsprechen und binden einen Fehler an eine lokale Konstante namens Fehler

Also, dann habe ich versucht, dies:

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

Und es gab mir eine schöne Beschreibung.

31

Von Der Swift Programming Language:

Wenn eine catch Klausel nicht ein Muster angeben, wird die Klausel entspricht und bindet einen Fehler an einer lokalen Konstante namens error.

Das heißt, es gibt eine implizite let error in der catch Klausel:

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

Alternativ, wie es scheint, dass let constant_name ist auch ein gültiges Muster, so dass Sie es verwenden könnte die Fehlerkonstante (diese umbenennen könnte praktikabel sein, wenn der Name error bereits verwendet wird):

do { 
    // … 
} catch let myError { 
    print("caught: \(myError)") 
} 
Verwandte Themen