0

从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 中是否有类似的东西可以使用协议或其他东西?

4

1 回答 1

2

不会。Swift 通常会通过设计避免隐式转换。__conversion他们甚至拿出了我们用来实现它的工具(隐式转换引入重要的小差异是很常见的。程序员考虑这些事情而不是依赖魔法通常很重要。这一直是 C 和 C++ 中错误的长期来源。

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

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

...
CustomError(error)

另请参阅Swift 是否支持隐式转换?

于 2016-01-14T14:16:15.050 回答