我正在用Swift 3语法定义一个自定义错误类型,我想提供一个用户友好的错误描述,这个错误是由Error
对象的localizedDescription
属性返回的。我该怎么做呢?
public enum MyError: Error {
case customError
var localizedDescription: String {
switch self {
case .customError:
return NSLocalizedString("A user-friendly description of the error.", comment: "My error")
}
}
}
let error: Error = MyError.customError
error.localizedDescription
// "The operation couldn’t be completed. (MyError error 0.)"
localizedDescription
是否有办法返回我的自定义错误描述(“错误的用户友好描述”)?请注意,这里的错误对象是Error
类型,而不是MyError
类型。
(error as? MyError)?.localizedDescription
但是有没有一种方法可以在不转换为错误类型的情况下使它工作呢?
7条答案
按热度按时间mlmc2os51#
正如Xcode8beta6发行说明中所述,
Swift定义的错误类型可以通过采用新的LocalizedError协议来提供本地化的错误描述。
在您的情况下:
如果错误被转换为
NSError
(这总是可能的),您可以提供更多的信息:通过采用
CustomNSError
协议,错误可以提供一个userInfo
字典(以及一个domain
和code
)。例如:fgw7neuy2#
我还要补充一点,如果你的错误有这样的参数
您可以在本地化描述中调用这些参数,如下所示:
您甚至可以将其缩短为:
ukqbszuj3#
现在有两个错误采用协议,你的错误类型可以采用这两个协议来为Objective-C - LocalizedError和CustomNSError提供额外的信息。下面是一个同时采用这两个协议的错误示例:
5jdjgkvh4#
使用struct也是一种选择。
blmhpbnm5#
这一条对我很有效:
rseugnpd6#
下面是更优雅的解决方案:
eit6fx6z7#