码
我有以下协议:
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'
下面是两个相关的错误:
Unable to infer associated type 'ViewModelType' for protocol 'BaseViewController'
Inferred type 'BaseViewModel' (by matching requirement 'viewModel') is invalid: does not conform to 'BaseViewModel'
期望结果
我想将ViewModelType的值限制为符合BaseViewModel协议。如果能以另一种方式做到这一点,那就会回答我的问题。但我想知道我做错了什么。
发布于 2016-02-14 02:41:50
我认为您需要协议BaseViewModel的具体实现,因此将MainViewModel定义为结构或类是可行的。
发布于 2016-02-14 05:04:46
类型别名的文档表明其格式如下:
类型-赋值→=type
type的定义为:
类型→数组.类型字典.类型函数.标识符.元组型可选类型.类型隐式-展开式-可选型协议.组合型元类型.类型类型
protocol-composition-type的定义为:
协议.组合型→协议<协议.标识符-列表选项>
因此,列出协议似乎不受支持,因此不清楚为什么您没有收到编译错误。如果您将其更改为该格式,它似乎可以工作(编译,但我还没有测试您得到了想要的结果):
protocol BaseViewController {
typealias ViewModelType = protocol<BaseViewModel>
var viewModel: ViewModelType? { get set }
}和:
class ViewController: UIViewController, BaseViewController {
typealias ViewModelType = protocol<MainViewModel>https://stackoverflow.com/questions/35387536
复制相似问题