了解Swift + NSError-通过此函数的所有路径都将自行调用

时间:2019-07-10 15:24:04

标签: swift nserror

Objective-C合作很长时间之后,我也刚刚开始与Swift合作。

我知道Swift使用Error协议而不是NSError,并且将来我还将使用自定义Error实现。但是,目前,我需要使用NSError中的Swift,并且发现以下代码可以轻松访问NSError上的Error属性:

extension Error {
    var code: Int { return (self as NSError).code }
    var userInfo: [AnyHashable? : Any?] { return (self as NSError).userInfo }
}

虽然我在此处的答案中找到了code部分的示例,但我自己添加了userInfo部分。现在,使用此扩展名访问someError.code时出现问题。但是,当使用someError.userInfo时,该应用程序在反复调用遍历后会崩溃。

Xcode显示警告,说明问题的根源:

  

通过此函数的所有路径都将自行调用

这是为什么?

据我所知Error只是可以由任何类实现的协议。 Error它本身没有codeuserInfo属性,所以应该(self as NSError).userInfo should not call Error.userInfo`吗?

所以我不明白为什么这是一个问题。另外,我不明白为什么这是userInfo的问题,而不是code的问题...

你知道这是什么原因吗?

0 个答案:

没有答案