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

时间:2016-01-14 12:15:11

标签: swift swift-protocols

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

1 个答案:

答案 0 :(得分:2)

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

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

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

...
CustomError(error)

另见Does Swift support implicit conversion?