Общий параметр 'T' не может быть выведен - Кодируемый - PullRequest
1 голос
/ 08 июня 2019

У меня есть протоколы с универсальными типами. правильный код ниже Я получаю сообщение об ошибке: «Общий параметр« T »не может быть выведен»

ошибка общего типа

что мне не хватает?

архитектура VIPER, поэтому у меня есть View, Presenter, Interactor ...

Protocols.swift

protocol OffersViewProtocol {
    var presenter: OffersPresenterProtocol? { get set }
    func setup()
    func displayResults()
}

protocol OffersPresenterProtocol {
    var interactor: OffersInteractorProtocol? { get set }
    var router: OffersRouterProtocol? { get set }
    func showResults<T: Codable>(for service: APIService,_ completion:  @escaping ResultsHandler<T>)
}

protocol OffersInteractorProtocol {
   func getResults<T: Codable>(for service: APIService,_ completion: @escaping ResultsHandler<T>)
}

Interactor.swift

class OffersInteractor: OffersInteractorProtocol {
    let dataManager = DataManagerService()
    func getResults<Offer>(for service: APIService, _ completion: @escaping ([Offer]?, ErrorHandler?) -> Void) {
        dataManager.get(for: service) { results in

        }
    }

}

Presenter.swift

class OffersPresenter: OffersPresenterProtocol {


    var interactor: OffersInteractorProtocol?

    var router: OffersRouterProtocol?

    func showResults<Offer>(for service: APIService, _ completion: @escaping ([Offer]?, ErrorHandler?) -> Void) {
        interactor?.getResults(for: service, { (results, error) in

        })
    }
}

1 Ответ

0 голосов
/ 08 июня 2019
    func showResults<Offer>(for service: APIService, _ completion: @escaping ([Offer]?, ErrorHandler?) -> Void) {
        interactor?.getResults(for: service, { (results:ResultType, error:Error) in

        })
    }

Вы должны явно указать тип, я пробовал на игровой площадке, и это будет работать.

...