我有以下协议:

protocol BaseViewController {
    typealias ViewModelType: BaseViewModel

    var viewModel: ViewModelType? { get set }
}

protocol BaseViewModel {
}


对于视图模型,我还具有以下协议:

protocol MainViewModel: BaseViewModel {
}


然后在我的MainViewController中:

class MainViewController: UIViewController, BaseViewController {
    typealias ViewModelType = MainViewModel

    var viewModel: ViewModelType?

    ...
}


失误

在MainViewController上,我得到了错误

Type 'MainViewController' does not conform to protocol 'BaseViewController'

以下是两个相关的错误:


在BaseViewController上:


Unable to infer associated type 'ViewModelType' for protocol 'BaseViewController'


在MainViewController的viewModel属性上


Inferred type 'BaseViewModel' (by matching requirement 'viewModel') is invalid: does not conform to 'BaseViewModel'

所需结果

我想限制ViewModelType的值以符合协议BaseViewModel。如果这可以通过另一种方式完成,那将回答我的问题。但是我想知道我在做什么错。

最佳答案

我认为您需要协议BaseViewModel的具体实现,因此将MainViewModel定义为结构或类即可。

10-08 12:26