具有相同大小写的多个枚举

Multiple Enums with same case

有没有更好的方法来解决这种情况。

我正在为我的项目关注 MVVM,我们为每个 ViewController 提供 ViewModels,这为他们提供了所需的数据。数据通过 enums 与 associatedValues.

传回

假设,我们有

enum HomeViewModelState {
    case failure(String)
    case anotherState(SomeModel)
}

enum ListingViewModelState {
    case failure(String)
    case anotherState(SomeModel)
}

正如我们所看到的,我们有一个重复的案例,即 failure(String) 在 api 失败的情况下传回错误消息。我想避免这种重复性的工作。有更好的方法吗?

您可以创建一个使用泛型的状态枚举:

enum ViewModelState<T> {
    case failure(String)
    case anotherState(T)
}

考虑使用 Result 而不是多个枚举,您将在每个控制器中存储一个状态 Result<SomeModel, Error> (并且每个控制器可以有不同的模型。状态分配很方便,你不再将字符串作为错误传递,而是使用正确的 Error 协议:

var state: Result<SomeModel1, Error>
...
state = .failure(MyCustomErrors.badThingHappened)
state = .success(SomeModel)

enum MyCustomErrors: Error {
    case badThingHappened

它仍然是一个 enum,可以在 switch 语句中使用:

switch state {
case .success(let model):
   ...
case .failure(let error):
   ...
}