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
}
我的问题是:使用第二种方法是否可以实际检索以及错误的值/大小写?或者如果我没有在入口点获得正确的值,即捕获量,那么我会错过这样做的机会!
答案 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
块中。)