如何在Swift中打印“catch all”exception的详细信息?

我正在更新我的代码使用Swift,我想知道如何打印错误的详细信息,匹配“catch all”子句的exception。 我稍微修改了这个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? } 

如果我发现意外的exception,我需要能够logging什么导致它。

我只是想出来了。 我注意到Swift文档中的这一行:

如果一个catch子句没有指定一个模式,那么这个子句将匹配任何错误并将其绑定到名为error的本地常量上

那么,我试过这个:

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

这给了我一个很好的描述。

Swift编程语言

如果一个catch子句没有指定一个模式,那么这个子句将匹配任何错误并将其绑定到名为error的本地常量上。

也就是说, catch子句中有一个隐含的let error

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

另外,看起来, let constant_name也是一个有效的模式,所以你可以用它来重命名错误常量(如果名称error已经在使用,这可能会很方便):

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