如何在catch中打印错误

时间:2016-10-21 18:58:37

标签: swift error-handling enums try-catch

catch let error as LocksmithError{
print(error)// it would print the case of the error.
}

但是,如果我这样做

catch LocksmithError.Duplicate{

}

catch{
print (LocksmithError) // Obviously I would just print LocksmithError, it won't print the case
print (LocksmithError.rawValue) // prints nothing
}

我的问题是:使用第二种方法是否可以实际检索以及错误的值/大小写?或者如果我没有在入口点获得正确的值,即捕获量,那么我会错过这样做的机会!

1 个答案:

答案 0 :(得分:3)

catch块是排他性案例,按顺序进行评估。当匹配成功时,我们停止

所以,让我们考虑一下这个结构:

catch LocksmithError.Duplicate {
    // 1
    print("duplicate")
}
catch {
    // 2
    print(error)
}

如果我们 1 ,那么范围是LocksmithError.Duplicate

如果我们处于 2 ,则范围内的每个其他类型的错误都会被捕获。你无法在这里抓住LocksmithError.Duplicate,因为 ex假设它会被 1 捕获,我们不会t 在这里。

现在, I 的方式是这样的:

catch let err as LocksmithError {
    // 1
    print(err)
}
catch {
    // 2
    print(error)
}

这可能是你追求的事情;它为我们提供了一个值err,它将错误带入 1 中的花括号中。 (自动error值仅存在于最终的全部catch块中。)