【问题标题】:How to print details of a 'catch all' exception in Swift?如何在 Swift 中打印“catch all”异常的详细信息?
【发布时间】:2015-09-29 21:37:12
【问题描述】:

我正在更新我的代码以使用 Swift,我想知道如何打印与“catch all”子句匹配的异常的错误详细信息。我对Swift Language Guide Page 中的示例稍作修改以说明我的观点:

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

如果我发现意外异常,我需要能够记录导致它的原因。

【问题讨论】:

    标签: ios swift swift2


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      来自Swift 编程语言

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-18
        • 2013-10-02
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 2013-07-25
        相关资源
        最近更新 更多