是否可以在Swift中自动注入异常处理代码?

Is it possible to automatically inject exception handling code in Swift?

我们的代码库中有很多区域可供开发人员执行以下操作:

try {
   // code 
} catch let error {
   print("error \(error)")
}

控制台记录错误并不是很有帮助,虽然做得更好会很棒,但人们仍然这样做。

我想知道是否可以自动将代码添加到异常处理程序中...最好是在构建时注入代码。这纯粹是为了跟踪,看看我们丢弃了哪些类型的错误。

(我知道一种解决方案是禁止这种事情发生,但我们也只想进行一般异常处理以查看出现的异常类型)。

如果此时不想记录错误,可以不捕获错误,让错误冒泡。标记方法 throws 并且不要将其放在 try 块中。然后你只能在顶层登录(或做其他事情)。

或者,您可以使用函数包装块:

func trylog(_ f: () throws -> Void) {
    do {
        try f()
    } catch {
        print(error)
    }
}

然后在 trylog 中,如果您愿意,您可以做其他事情而不是 print

Swift try/catch 并不是真正的 "exceptions." 它们只是围绕 error-return 的一种特殊语法。这意味着没有花哨的运行时机制可以挂钩(这很像每次调用 return 时挂钩)。

虽然控制台日志记录不是很有用,因为您无法在设备上轻松访问它们,但我认为在几乎所有情况下,"just log it" 都是正确的选择catch 块。我很少遇到在移动应用程序中可以做更有用的事情的情况。开发者对 "just log it," 感到内疚,但如果你是 "doing it right," 你会怎么做?我只建议将 print 替换为更多 feature-rich 记录器,这样您就可以从中获得一些价值,或者至少将 print 包装在您自己的函数中,以便稍后将其换出更好的东西。