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


84

我正在更新代码以使用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?
}

如果我发现了意外的异常,则需要能够记录引起它的原因。

Answers:


121

我只是想通了。我在Swift文档中注意到这一行:

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

所以,然后我尝试了这个:

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

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


47

来自Swift编程语言

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

也就是说,let errorcatch子句中有一个隐式:

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

另外,这似乎let constant_name也是一个有效的模式,因此您可以使用它来重命名错误常量(如果error已经使用了该名称,可以想象这很方便):

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.