5

也许我只是完全想多了,但我正在尝试使用枚举来处理来自我正在集成的 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


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

问题

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

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

4

1 回答 1

4

您可以做的是使用关联值并将低级错误存储在专用案例中。例如:

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

苹果文档:

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

于 2017-11-18T23:31:50.740 回答