如何在Swift中打印'catch all'异常的详细信息?

mar*_*314 78 ios swift swift2

我正在更新我的代码以使用Swift,我想知道如何打印与'catch all'子句匹配的异常的错误详细信息.我稍微修改了这个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?
}
Run Code Online (Sandbox Code Playgroud)

如果我遇到意外的异常,我需要能够记录导致它的原因.

mar*_*314 113

我刚想通了.我在Swift文档中注意到这一行:

如果catch子句未指定模式,则该子句将匹配并将任何错误绑定到名为error的本地常量

那么,我试过这个:

do {
    try vend(itemNamed: "Candy Bar")
...
} catch {
    print("Error info: \(error)")
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个很好的描述.


Ark*_*kku 43

来自Swift编程语言:

如果catch子句未指定模式,则该子句将匹配并将任何错误绑定到名为的本地常量error.

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

do {
    // …
} catch {
    print("caught: \(error)")
}
Run Code Online (Sandbox Code Playgroud)

或者,它似乎let constant_name也是一个有效的模式,因此您可以使用它来重命名错误常量(如果名称error已经在使用中,这可能会很方便):

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}
Run Code Online (Sandbox Code Playgroud)