Я пытаюсь сделать обобщенный протокол c, чтобы я мог чередовать тип протокола в зависимости от контроллера. Вот что я имею в виду, и я сделал.
Ниже представлен ViewController, который обрабатывает тип модели, и Presenter, который является протоколом.
class ModelVC<T: Codable, P: BaseProtocol.Presenter>: ViewController {
var refreshControl: UIRefreshControl!
var results = [T]()
var presenter: P!
override func viewDidLoad() {
super.viewDidLoad()
presenter.error ....
}
}
Когда я расширяю ModelVC
class LoanHistoryVC: ModelVC<LoansModel, LoanHistoryProtocol.Presenter> {
override func viewDidLoad() {
super.viewDidLoad()
presenter = LoanHistoryPresenter(view: self, source: NetworkAdapter.instance, loading: loading, error: errorTracker)
presenter.start()
}
}
код выше, я получаю Generic parameter 'T' could not be inferred error
Вот мой Base Protocol
struct BaseProtocol {
typealias Presenter = BasePresenter
}
protocol BasePresenter: class {
var loading: ActivityIndicator { get }
var error: ErrorTracker { get }
func start()
func stop()
}
История кредита записывается как
struct LoanHistoryProtocol {
typealias Presenter = _LoanHistoryPresenter
}
protocol _LoanHistoryPresenter: BasePresenter {
.....
}
struct LoansModel: Codable {
var id: Int?
}
Так что теперь это дает ошибку, о которой я упоминал: как у меня есть общий c протокол, чтобы я мог легко добавить любой по мере необходимости.