如何控制自定义Swift错误的.localizedDescription?

时间:2018-04-06 17:09:50

标签: swift inheritance error-handling try-catch

我的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属性不被使用?如何创建始终提供自定义消息的自定义ErrorLocalizedError结构?

0 个答案:

没有答案