我有夫特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 –