【发布时间】:2022-01-03 11:31:15
【问题描述】:
我为我的 SwiftUI 项目编写了几个视图模型。事实证明,它们共享相当多的属性和代码,我想将这些代码提取到通用视图模型中,然后通过用户类继承来专门化真实的视图模型。不幸的是,这变得相当困难。这是一个简化的示例:
class viewModelA: ObservableObject {
enum Animal {
case cat
case dog
}
@published var selected: Animal?
func select(_ animal: Animal?) {
self.selected = animal
}
...
}
class viewModelB: ObservableObject {
enum Animal {
case lion
case tiger
}
@published var selected: Animal?
func select(_ animal: Animal?) {
self.selected = animal
}
...
}
我尝试的第一件事是创建一个协议并为 Animal 使用具有关联类型的协议,但后来我遇到了 @published 的属性。 Swift 不允许在协议中包含属性包装器...
我如何概括这两个类?
【问题讨论】: