从非协议,非类类型“ V”继承

时间:2018-12-02 10:04:26

标签: swift swift4.2

我正在尝试定义类似的类

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”

1 个答案:

答案 0 :(得分:0)

使用泛型无法实现您要完成的任务。首先,您必须能够表示您的通用参数V是协议还是非最终类。这是不可能的。但是,此约束对于约束M: V有意义是必要的。

您可能会更幸运地使用具有关联类型的协议来对问题进行建模,例如:

protocol FillerProtocol {
    associatedtype ResultModel
}

class ListController<RequestModel,  Filler: FillerProtocol, Cell>: BaseViewController
    where
        Cell: BaseCell<Filler>,
        RequestModel: ExtendableByBaseListRequestModel
{

}

那样,您甚至不必指定ResultModel类型,它就由您的FillerProtocol定义。