具有相同大小写的多个枚举
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):
...
}
有没有更好的方法来解决这种情况。
我正在为我的项目关注 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):
...
}