Наследование от внепротокольного типа без класса 'V' - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь определить класс, например

class x<V,M : V> {}

Какой V будет протоколом при определении нового класса, расширяющего x, но компилятор говорит:

Наследование отнепротокольный, не относящийся к классу тип 'V'

Мой реальный пример:

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

Которые вызывают эту ошибку:

Тип 'ResultModel'ограничено внепротокольным типом, не относящимся к классу' FillerProtocol '

1 Ответ

0 голосов
/ 02 декабря 2018

То, что вы пытаетесь достичь, невозможно с помощью дженериков.Во-первых, вы должны иметь возможность выразить, что ваш общий параметр V является протоколом или неконечным классом.Это невозможно.Но это ограничение необходимо, чтобы ограничение M: V имело какой-либо смысл.

Возможно, вам больше повезет, если вы будете моделировать свою проблему с использованием протоколов со связанными типами, например:

protocol FillerProtocol {
    associatedtype ResultModel
}

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

}

то есть вам даже не нужно указывать тип ResultModel, он определяется вашим FillerProtocol.

...