从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中是否有类似的东西使用协议或其他东西?
答案 0 :(得分:2)
没有。 Swift通常通过设计避免隐式转换。他们甚至拿出了我们用来实现它的工具(__conversion
),因为它会给编译器和注入细微的错误带来很多麻烦。隐式转换引入的重要差异很常见。程序员考虑这些事情而不是依靠魔术通常很重要。这是C和C ++中长期存在的错误来源。
如果您在_
之前添加error
(因此不需要标签),那么显式转换是微不足道的:
init(_ error: NSError) { ... }
...
CustomError(error)