与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
它本身没有code
或userInfo
属性,所以应该(self as NSError).userInfo should not call
Error.userInfo`吗?
所以我不明白为什么这是一个问题。另外,我不明白为什么这是userInfo
的问题,而不是code
的问题...
你知道这是什么原因吗?