【问题标题】:Using enums to design error types in Swift在 Swift 中使用枚举设计错误类型
【发布时间】:2018-05-02 11:51:23
【问题描述】:

也许我只是想得太多了,但我正在尝试使用枚举来处理来自我正在集成的 API 的错误。

从这个 API 的 swagger 文档中,我可以看到所有可能返回的响应。我把这些写成BaseError枚举:

enum BaseError: Error {
    case badRequest // 400
    case unauthorized // 401
    case forbidden // 403
    case unhandledError // XXX
    ...
}

现在我的客户是我的问题开始的地方。

我最初的希望是采用这个 BaseError 枚举并根据我所在的客户扩展/添加其他案例。

类似:

enum ClientSpecificError: BaseError {
    case clientError
}

这将允许我返回像 ClientSpecificError.unauthorized 这样的错误


现在我知道这是不可能的,因为枚举不能继承其他枚举,但我对如何实现这一点缺少一些理解。

问题

还有其他方法可以使用枚举来实现吗?

这甚至是“最佳实践”吗?

【问题讨论】:

    标签: ios swift error-handling enums associated-value


    【解决方案1】:

    您可以改为使用 associated values 并将低级错误存储在专用案例中。例如:

    enum ClientSpecificError: Error {
        case clientError
        case baseError(BaseError)
    }
    

    苹果文档:

    但是,将其他类型的关联值与这些案例值一起存储有时会很有用。这使您可以将其他自定义信息与 case 值一起存储,并允许此信息在您每次在代码中使用该 case 时发生变化。

    【讨论】:

    • 太棒了,经常使用这个已经只是一个我完全没有考虑过的不同用例。谢谢!
    • @sargturner 不错!很高兴为您提供帮助;)
    猜你喜欢
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多