Swift 如何在catch中打印错误

Swift 如何在catch中打印错误,swift,error-handling,enums,try-catch,Swift,Error Handling,Enums,Try Catch,然而,如果我这样做 catch let error as LocksmithError{ print(error)// it would print the case of the error. } 我的问题是:使用第二种方法,我是否可以实际检索到任何错误以及错误的值/情况?或者如果我没有在入口点(即捕获点)获得正确的值,那么我就错过了这样做的机会 catch块是排他性案例,按顺序进行评估。当比赛成功时,我们停止 那么,让我们考虑一下这个结构: catch LocksmithError.Dup

然而,如果我这样做

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

我的问题是:使用第二种方法,我是否可以实际检索到任何错误以及错误的值/情况?或者如果我没有在入口点(即捕获点)获得正确的值,那么我就错过了这样做的机会

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

那么,让我们考虑一下这个结构:

catch LocksmithError.Duplicate{

}

catch{
print (LocksmithError) // Obviously I would just print LocksmithError, it won't print the case
print (LocksmithError.rawValue) // prints nothing
}
如果我们在1,那么范围内是
锁匠错误。重复

如果我们在2,那么范围内的是被捕获的所有其他类型的错误。你无法找到锁匠的错误。在这里复制,因为假设它在1中被捕获,我们就不在这里了

现在,我会这样做:

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

那可能就是你想要的那种东西;它为我们提供了一个值
err
,该值将错误带到1中的大括号中。(自动
error
值只存在最终的catch all
catch
块。)

您可以
print(error)
在无条件
catch
中@Hamish我很抱歉我不明白您的意思?您可以编写
catch{print(error)}
…@Hamish但是如果它是像这里一样的重复案例,并且我已经捕捉到了,那么我将无法打印它是的,捕捉就是这样工作的。我误解你的问题了吗?我以为您只是在问如何在final
catch
块中检索错误。所以你的问题实际上是如何打印给定的错误,不管它是否已经被捕获?如果是这样的话,请在你的帖子里说清楚:)看来我解释得不好。我想能够打印(错误)在1和2。在1中,它将打印“复制”,在2中,它将打印任何错误。在1中,只需写入
打印(“复制”)
。你知道你是对的,因为如果不是锁匠。重复,我们就不会在这里。我重写了我的答案,以证明我的意思。像往常一样,我建议你阅读我关于这个主题的书:你想得太多了
err
只是我编造的一个名字。我可以称之为wibblywobbblywoo
catch let err as LocksmithError {
    // 1
    print(err)
}
catch {
    // 2
    print(error)
}