我正在尝试定义类似的类
class x<V,M : V> {}
在定义扩展x的新类时,哪个V将是协议 但是编译器说:
从非协议,非类类型“ V”继承
我的真实例子:
class ListController
<RequestModel, FillerProtocol , ResultModel, Cell>: BaseViewController
where
ResultModel : FillerProtocol,
Cell: BaseCell<FillerProtocol>,
RequestModel: ExtendableByBaseListRequestModel {}
导致此错误的原因:
类型“ ResultModel”限制为非协议,非类类型“ FillerProtocol”
答案 0 :(得分:0)
使用泛型无法实现您要完成的任务。首先,您必须能够表示您的通用参数V
是协议还是非最终类。这是不可能的。但是,此约束对于约束M: V
有意义是必要的。
您可能会更幸运地使用具有关联类型的协议来对问题进行建模,例如:
protocol FillerProtocol {
associatedtype ResultModel
}
class ListController<RequestModel, Filler: FillerProtocol, Cell>: BaseViewController
where
Cell: BaseCell<Filler>,
RequestModel: ExtendableByBaseListRequestModel
{
}
那样,您甚至不必指定ResultModel
类型,它就由您的FillerProtocol
定义。