我的错误类是:
public enum ModelError: Error {
case invalidArray(model: String)
var localizedDescription: String {
switch self {
case .invalidArray(model: let model):
return "\(model) has an invalid array"
default:
return "modelError"
}
}
}
当在回调函数中作为Error
传递时,我想访问其自定义的localizedDescription。例如:
func report(_ error: Error) {
print("Error report: \(error.localizedDescription)")
}
但是打电话给report(ModelError.invalidArray(model: "test"))
打印:
"The operation couldn’t be completed. (ModelError error 0.)"
这样的事情在NSError中似乎是可行的,因为我可以覆盖那里的localizedDescription
属性。但我不想使用NSError
,因为它并不是一件很快的事情,而且很多图书馆都与Error
合作。
答案 0 :(得分:1)
根据Documentation,localizedDescription是在协议扩展中实现的,而不是在协议声明中实现,这意味着没有任何东西可以遵守或覆盖。枚举的类型范围接口符合错误。
我解决这个问题的方法是使用包装器协议:
protocol LocalizedDescriptionError: Error {
var localizedDescription: String { get }
}
public enum ModelError: LocalizedDescriptionError {
case invalidArray(model: String)
var localizedDescription: String {
switch self {
case .invalidArray(model: let model):
return "\(model) has an invalid array"
default:
return "modelError"
}
}
}
let error: LocalizedDescriptionError = ModelError.invalidArray(model: "Model")
let text = error.localizedDescription // Model Has an invalid array