протокол ассоциированного типа и инициализация класса generi c - PullRequest
0 голосов
/ 07 января 2020

У меня есть класс PaginatorImp, который реализует протокол Paginator для внедрения зависимостей. На фабрике я хочу создать PaginatorImp протокол выброса, но я не могу, потому что протокол с ассоциированным типом. Как я могу это решить?

Paginator класс (Element - это модель, которая соответствует Paginatable)

protocol Paginator {
    associatedtype Element: Paginatable

    var isLoading: Bool { get }

    //MARK: Actions
    var loadAction: Action<Void, Element>! { get set }
    var refreshAction: Action<Void, Element>! { get set }
    var loadMoreAction: Action<Int, Element>! { get set }
    var loadItemsIfNeeded: PublishRelay<Void> { get }

    //MARK: Data
    var elements: BehaviorRelay<([Element.Content], IndexSet?)> { get }
}

final class PaginatorImp<Element: Paginatable>: Paginator {
    private let disposeBag: DisposeBag = .init()

    //MARK: properties
    private var page: Int = 1
    private var pagesCount: Int = 1
    var isLoading: Bool = false

    //MARK: Data
    var elements: BehaviorRelay<([Element.Content], IndexSet?)> = .init(value: ([], nil))

Factory (я использую EasyDI для DI)

Ошибка: протокол 'Paginator' можно использовать только как общее ограничение c, поскольку он имеет требования к Self или связанный тип

final class ServicesFactory: Assembly {
    var paginator: Paginator { return define(init: PaginatorImp<News>())}
}
...