我有夫特3上的游乐场所定义的下面的类:为什么错误总是NSError?
class MyError: Error {
}
然后,创建这样的类的实例和检查它是否是一个NSError
let firstError = MyError()
firstError is NSError // Output: false
如预期的输出,并且我还收到一条警告,表示Cast from 'MyError' to unrelated type 'NSError' always fails
。这非常有意义,对我来说,如果我改变代码一点点,变量声明为一个Error
,我得到一个奇怪的结果:
var secondError: Error
secondError = MyError()
secondError is NSError // Output: true
在这种情况下,我得到的最后一行一条警告说'is' test is always true
。我不明白为什么一个Error
将始终是NSError
,当模型被定义为另一种方式时(NSError: Error
)。任何想法发生了什么?
我认为这是相关的:http://stackoverflow.com/questions/39033194/anyobject-not-working-in-xcode8-beta6 – courteouselk
因为编译器能够强制'错误'到'NSError'。在Swift仓库中快速搜索:https://github.com/apple/swift/blob/2fe4254cb712fa101a220f95b6ade8f99f43dc74/stdlib/public/core/ErrorType.swift#L174 –