您应该如何处理生产环境中的错误?

时间:2018-01-22 18:50:18

标签: ios swift error-handling

我一直在关注一些教程并构建了一个我想发布的应用程序,但我不确定如何处理错误处理。

教程教你如do-catch块之类的东西,但每当它们处理抛出错误的情况时,它们只是将错误记录到控制台,这在生产环境中显然是无益的。

此外,do-catch块的一些示例似乎没什么用处。作为一个例子,我使用Realm数据库作为我的应用程序的核心部分,我被告知在AppDelegate中初始化它的方式是这样的:

do {
    _ = try Realm()
} catch {
    // TODO: - Handle Exception
}

但是在这种情况下,由于领域是我的应用程序的核心部分,我甚至不介意它是否会崩溃应用程序,因为如果它没有正确启动它将会在以后崩溃。

有很明显的情况我应该向用户显示错误(例如,如果您尝试连接到API但没有wifi),或者可以提供默认值,但我不会知道该怎么做。

1 个答案:

答案 0 :(得分:3)

处理错误没有一个好方法,因为如何完全处理错误取决于具体情况。

但是,一般情况下,有一些错误处理指南:

  • 在throwable函数上使用do-catch块,除非你有 有充分理由这样做
  • 不惜一切代价避免运行时错误,不要抛出致命错误。即使您的应用程序遇到无法正确处理的错误(应用程序无法运行可抛出函数的结果),也不要让您的应用程序因运行时错误而崩溃,而应让用户知道有什么不对劲的。崩溃的应用程序向您的用户发送了一条非常糟糕的消息,而在遇到错误后正常失败并不是一件坏事。
  • 在catch块中,尝试在没有的情况下解决错误 让错误的用户知道错误 可恢复的(例如,您可以使用默认值而不是 您希望从throwable函数获得的值)
  • 如果错误无法解决 处理后,让用户知道有错误(例如他们 在发出网络请求或网络请求时没有互联网连接 网络请求因任何其他原因而失败)并尝试给他们一个 替代方法(即稍后在有互联网时尝试 连接)
  • 如果您完全确定该函数不会实际抛出错误(例如try!,则只能使用Realm.init()和类似的强制方法(强制解包等)在应用程序的生命周期中第一次调用它时出错,因此在Realm的第一次实例化之后,您可以安全地执行try! Realm())或者如果错误代表程序员错误(例如文件不在正确的位置,这是应用程序所需的,但请确保在开发阶段确实纠正了这些错误
相关问题