清晰错误 1.0.4

清晰错误 1.0.4

Max Howell 维护。



清晰错误 badge-platforms badge-languages badge-ci badge-codecov badge-version

清晰错误的目标是防止您向用户展示如下字符串

操作无法完成。(第三方模块。(0xx10d6b4a44 的未知上下文)。SomeError 错误 0。)

该字符串是 Swift Error 的默认 localizedDescription。使用 LegibleError 取代它,您将得到类似以下的字符串

操作无法完成。(第三方模块.SomeError.networkFailure(http: 503))

Error.legibleLocalizedDescription

如果您的 Error 如此类

enum SystemError: Error {
    case databaseFailure(internalCode: Int)
}

let error = SystemError.databaseFailure
// ^^ obviously you’d get this from a callback or `catch` in the real-world

let alert = UIAlertController()
alert.message = error.localizedDescription
present(alert)

弹窗将显示

操作无法完成。(MyModule。(0xx10d6b4a44上下文未知)。SystemError错误0。)

但是如果我们使用.legibleLocalizedDescription

import LegibleError

let alert = UIAlertController()
alert.message = error.legibleLocalizedDescription
present(alert)

弹窗将显示

操作无法完成。(SystemError.databaseFailure(internalCode: 34))

仍然不太好,但在错误报告中更有用。

如果你想要一个更好的消息,实现LocalizedError,这将使得localizedDescriptionlegibleLocalizedDescription都返回你指定的字符串

enum SystemError: LocalizedError {
    case databaseFailure
    
    var errorDescription: String? {
        switch self {
        case databaseFailure(let code):
            return "A serious database failure occurred. Contact support. (#\(code))"
        }
    }
}

弹窗将显示

发生了严重的数据库故障。请联系支持人员。(编号34)


LegibleError存在的原因是

  1. 你无法控制第三方,也无法强迫他们实现LocalizedError
  2. 你代码库中的某些错误非常不可能发生,因此“本地化”它们并不是一个好的维护负担。
  3. 记录错误时,你希望获得完整的信息,而没有任何风险导致本地化版本“落后”,让编译器去做这项工作,在此类情况下使用legibleDescription(请参阅下一节)。

可记录的错误描述

这个

let msg = "There was an error (\(error))"

会给你这个

发生了一个错误(databaseFailure)

这会丢失枚举类型的上下文;使用legibleDescription

let msg = "There was an error! \(error.legibleDescription)"

发生了一个错误(SystemError.databaseFailure(internalCode: 34))

legibleDescription是相对于description的,而legibleLocalizedDescription是相对于localizedDescription的。legibleDescription始终适合与,即开发者,沟通发生了哪个错误。在本记录中使用它,并为用户提供一个良好的消息。

Linux上的更好描述

Linux略落后一点,在Linux上通常只能得到“操作无法完成”。我们完全支持Linux。

支持mxcl

嗨,我是Max Howell,我写了很多开源软件,你也许已经在使用它们了(比如Homebrew?)。我全职从事开源工作,这很艰难;目前我的收入低于最低工资。请帮助我继续我的工作,我会非常感激的 x

其他捐款/小费选项

安装

SwiftPM

package.append(.package(url: "https://github.com/mxcl/LegibleError.git", from: "1.0.0"))

CocoaPods

pod 'LegibleError', '~> 1.0'

Carthage

等待:[Carthage#1945](https://github.com/Carthage/Carthage/pull/1945)。)