【发布时间】:2019-08-27 03:11:31
【问题描述】:
例如,我为我的项目的所有视图创建了基类,使用 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),我将在@987654327 处收到错误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的自定义视图模型。
【问题讨论】:
-
你违反了 Liskov 替换原则。见ericlippert.com/2015/04/27/wizards-and-warriors-part-one