我的Swift项目中有自定义错误类型:
struct RuntimeError : LocalizedError {
let localizedDescription: String
init(_ str : String) {
localizedDescription = str
}
}
如果它是在顶层提升的,我会得到一条这样的消息,这个消息很有用,但并不完全符合我的预期:
致命错误:顶级错误:MyApp.RuntimeError(localizedDescription:“错误消息......”)
如果我抓住它并记录它的.localizedDescription
,我甚至不会得到类似调试的结构描述,而是通用文本!
E.g。代码
do {
throw RuntimeError("Message")
} catch {
NSLog("Caught error: %@", error.localizedDescription)
}
仅输出:
抓到错误:无法完成操作。 (MyApp.RuntimeError错误1。)
如果我将日志更改为(error as! RuntimeError).localizedDescription
,我会得到预期的字符串,但这不是解决方案,因为实际上并非所有错误都属于这种类型。
为什么在通过localizedDescription
协议访问时,我的struct Error
属性不被使用?如何创建始终提供自定义消息的自定义Error
或LocalizedError
结构?