我有一个带有关联值的枚举,我想将其用作 RxDataSources 中的一个项目。我尝试通过将其符合 Hashable 来使其符合可识别性,如下所示
enum DriverHubWidget: Hashable, Identifiable {
static func == (lhs: DriverHubWidget, rhs: DriverHubWidget) -> Bool {
return lhs.hashValue == rhs.hashValue
}
var id: Int { hashValue }
case greetings(DriverHubGreetingsViewModel)
case scorecard(DriverHubScorecardSummary?, Error?)
case optOut
func hash(into hasher: inout Hasher) {
switch self {
case .greetings( _):
return hasher.combine(1)
case .scorecard( _, _):
return hasher.combine(2)
case .optOut:
return hasher.combine(3)
}
}
}
我通过简单地为每个案例分配一个 Int 值来实现哈希函数。然后为了符合可识别,我添加了一个返回hashValue的id属性。这编译得很好。
现在,当我尝试使用它为节模型声明类型别名时,如下所示
typealias WidgetSection = AnimatableSectionModel<String, DriverHubWidget>
它确实编译并抛出错误,Type 'DriverHubWidget' does not conform to protocol 'IdentifiableType'
我不明白为什么它不起作用,当枚举符合 Hashable 和 Identifiable 时它编译得很好,但是当使用时,一致性以某种方式无效是不是因为枚举的关联值不是 Hashable?