是否可以在 Swift 中设置从 NSError 到自定义错误的隐式转换?

Is it Possible To Set Up Implicit Conversion from NSError to Custom Error in Swift?

NSHipster 阅读以下内容让我想知道 NSError 以及是否可以设置一些东西以便 NSError 隐式转换为自定义错误类型。

我创建了以下内容:

protocol NSErrorConvertible {

    init(error: NSError)
} 

还有这个

struct CustomError: NSErrorConvertible {
    var message: String
    var code: String?

    init(error: NSError) {
        code = String(error.code)
        message = error.localizedDescription
    }   
}

但是,我没有看到任何可以进行隐式转换的东西。

我知道 C++ 中存在这样一个功能,它只有一个参数的构造函数。 Swift using protocols 或其他东西中是否有类似的东西可用?

没有。 Swift 通常通过设计避免隐式转换。他们甚至拿走了我们用来实现它的工具 (__conversion),因为它给编译器和注入细微的错误带来了很多麻烦。隐式转换引入重要的小差异是很常见的。程序员考虑这些事情而不是求助于魔术通常很重要。这一直是 C 和 C++ 中错误的长期来源。

如果您在 error 之前添加一个 _(因此不需要标签),那么显式转换是微不足道的:

init(_ error: NSError) { ... }

...
CustomError(error)

另见 Does Swift support implicit conversion?