У меня есть класс 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>())}
}