不能覆盖 Swift 中的变量



例如,我为使用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: CustomViewModelProperty '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()
}
}

我怎样才能满足以下条件?

  1. 每个自定义视图都应该继承BaseView
  2. BaseView应该有BaseViewModel.
  3. 每个自定义视图都可以具有从BaseViewModel继承的自定义视图模型。

我建议BaseView接受泛型ViewModel,如下所示,这样您就不需要overrideviewModel属性,并且您的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'
}

最新更新