【发布时间】:2019-12-10 19:39:06
【问题描述】:
我有一个基本的 ViewController 和一个基本的 ViewModel。基本 ViewModel 由基本 ViewController 使用。另外,我有 2 个 ViewControllers 子类和 2 个 ViewModels 子类需要一起使用。
例子:
class BaseViewModel {
func somethingBasic() {}
}
class ConcreteViewModel1: BaseViewModel {
func somethingConcrete1() {}
}
class ConcreteViewModel2: BaseViewModel {
func somethingConcrete2() {}
}
class BaseViewController {
let viewModel: BaseViewModel
init(with viewModel: BaseViewModel) {
self.viewModel = viewModel
}
}
class ConcreteViewController1: BaseViewController {
init(with viewModel: ConcreteViewModel1) {
super.init(with: viewModel)
}
func useViewModel() {
viewModel.somethingBasic()
viewModel.somethingConcrete1() //this does not work
}
}
class ConcreteViewController2: BaseViewController {
init(with viewModel: ConcreteViewModel2) {
super.init(with: viewModel)
}
func useViewModel() {
viewModel.somethingBasic()
viewModel.somethingConcrete2() //this does not work
}
}
问题是:使viewmodel.somethingConcrete1() 和viewmodel.somethingConcrete2() 工作的首选解决方案是什么?
【问题讨论】:
-
你应该使用协议或在基类中实现
somethingConcrete2
标签: ios swift inheritance hierarchy