考虑下面的简单代码:
func showError(error: Error) {
debugPrint("A", error)
debugPrint("B", error.localizedDescription)
if let myError = error as? BarError {
debugPrint("C", myError.localizedDescription)
}
}
以下代码输出:
"A" external error: La connexion Internet semble interrompue.
"B" "L’opération n’a pas pu s’achever. (Foo.BarError erreur 0.)"
"C" "An error happened. My description. (external error: La connexion Internet semble interrompue.)"
为什么.localizedDescription
不会返回相同的消息,具体取决于编译器认为该对象的类型?
以下是BarError
的代码:
public enum BarError: Error, CustomStringConvertible {
case a
case b
case externalError(Error)
var localizedDescription: String {
return "An error happened. My description. (\(self))"
}
public var description: String {
switch self {
case .a:
return "A"
case .b:
return "B"
case .externalError(let error):
return "external error: \(error.localizedDescription)"
}
}