gpt4 book ai didi

swift - 为什么 Error 总是 NSError?

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:20 25 4
gpt4 key购买 nike

我使用 Swift 3 在 Playground 上定义了以下类:

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)。知道这里发生了什么吗?

最佳答案

这是允许 Swift Error 类型与 Objective-C 互操作的有意行为。

编译器只会在将 Swift 错误桥接到 Objective-C 时进行强制转换,或者在您所拥有的只是可能包含任何内容的 Error 存在的情况下……记住它可能就像以及来自用 Objective-C 编写的 throws 函数。如果您需要将 NSError 作为参数直接传递给某些 Objective-C 方法(无论出于何种原因),这也会让您获得强制转换。

关于swift - 为什么 Error 总是 NSError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40898805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com