我有一个关联值的枚举,我想使它等同于测试目的,但不知道这种模式如何适用于具有多个参数的枚举情况. 例如,总结如下,我知道使标题等同的语法.对于包含不同类型的多个值的选项,这
例如,总结如下,我知道使标题等同的语法.对于包含不同类型的多个值的选项,这将如何工作?
enum ViewModel {
case heading(String)
case options(id: String, title: String, enabled: Bool)
}
func ==(lhs: ViewModel, rhs: ViewModel) -> Bool {
switch (lhs, rhs) {
case (let .heading(lhsString), let .heading(rhsString)):
return lhsString == rhsString
case options...
default:
return false
}
}
我知道Swift 4.1可以为我们合成Equatable的一致性,但是目前我无法更新到这个版本.
一种方便的方法是使用元组可以与==进行比较.您还希望将兼容性代码包含在Swift版本检查中,以便在项目更新到Swift 4.1后使用自动合成:
enum ViewModel: Equatable {
case heading(String)
case options(id: String, title: String, enabled: Bool)
#if swift(>=4.1)
#else
static func ==(lhs: ViewModel, rhs: ViewModel) -> Bool {
switch (lhs, rhs) {
case (let .heading(lhsString), let .heading(rhsString)):
return lhsString == rhsString
case (let .options(lhsId, lhsTitle, lhsEnabled), let .options(rhsId, rhsTitle, rhsEnabled)):
return (lhsId, lhsTitle, lhsEnabled) == (rhsId, rhsTitle, rhsEnabled)
default:
return false
}
}
#endif
}
