例如,我为使用MVVM模式的项目的所有视图创建了基类,目前还没有任何问题。
class BaseView: UIView {
var viewModel: ViewModelProtocol
init(viewModel: ViewModelProtocol) {
self.viewModel = viewModel
super.init(frame: .zero)
}
}
protocol ViewModelProtocol {
}
class BaseViewModel: ViewModelProtocol {
}
但是,如果我创建一个从父类(BaseView
(继承的子类(CustomView
(,并且它必须有一个单独的 ViewModel(CustomViewModel
(,我将在override var viewModel: CustomViewModel
行Property 'viewModel' with type 'CustomViewModel' cannot override a property with type 'ViewModelProtocol'
出现错误。
final class CustomView: BaseView {
override var viewModel: CustomViewModel
}
final class CustomViewModel: BaseViewModel {
var name: String
init(name: String) {
self.name = name
super.init()
}
}
我怎样才能满足以下条件?
- 每个自定义视图都应该继承
BaseView
。 BaseView
应该有BaseViewModel
.- 每个自定义视图都可以具有从
BaseViewModel
继承的自定义视图模型。
我建议BaseView
接受泛型ViewModel
,如下所示,这样您就不需要override
viewModel
属性,并且您的viewModel
将始终与从BaseView
继承时提供的自定义类型相同。
class BaseView<ViewModel: ViewModelProtocol>: UIView {
var viewModel: ViewModel
init(viewModel: ViewModel) {
self.viewModel = viewModel
super.init(frame: .zero)
}
}
final class CustomView: BaseView<CustomViewModel> {
// viewModel is of type 'CustomViewModel'
}