Iがスイフト3とプレイグラウンド上で定義された次のクラスがあります。私はこのようなクラスのインスタンスを作成し、それが期待どおりに出力されるNSError
なぜエラーは常にNSErrorですか?
let firstError = MyError()
firstError is NSError // Output: false
であるかどうかを確認し、そして
class MyError: Error {
}
をまた、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
と言っています。私はがいつもNSError
であることを、モデルが逆の方法で定義されている(NSError: Error
)ようにすることはできません。何がここで何が起こっている考えですか?
私はこれが関連していると思う:http://stackoverflow.com/questions/39033194/anyobject-not-working-in-xcode8-beta6 – courteouselk
コンパイラは 'Error'を' NSError'に強制することができるので。 Swiftレポのクイック検索で、これがわかりました:https://github.com/apple/swift/blob/2fe4254cb712fa101a220f95b6ade8f99f43dc74/stdlib/public/core/ErrorType.swift#L174 –