2015-07-11 121 views
56

我正在更新我的代碼以使用Swift,並且我想知道如何打印與'catch all'子句匹配的異常的錯誤詳細信息。我稍微從這個Swift Language Guide Page修改的例子來說明我的觀點:如何在Swift中打印'catch all'異常的詳細信息?

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

那我要是追到了意外的異常,我需要能夠登錄一些關於什麼原因造成的。

回答

84

我只是想通了。我注意到在斯威夫特文檔這一行:

如果catch子句不指定一種模式,該條款將匹配任何錯誤綁定到本地不變命名錯誤

所以,後來我試着這個:

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

它給了我一個很好的描述。

31

雨燕編程語言

如果catch子句不指定一種模式,該條款將匹配任何錯誤綁定到名爲error局部常量。

也就是說,有catch子句中隱含let error

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

另外,似乎let constant_name也是一個有效的模式,所以你可以用它來命名錯誤常量(這如果名稱error已被使用,可能會很方便):

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