Обобщения Swift: "Общий параметр T не может быть выведен"
Я пытаюсь сделать общий класс обработчика запросов на основе Moya и Object Mapper. По сути, я хочу метод, который выполняет запрос к Moya Target и выполняет некоторую базовую обработку как в случае успеха, так и в случае неудачи:
мой класс будет примерно таким, основанным на этом ответе:
class APIRequestHandler<T: Mappable> {
let provider = APIManager().getAPIProvider() // Moya provider
func performRequest(target: Target, completionHandler: (response: T?, error: StoreError?) -> Void) {
provider.request(target) { result in
switch result {
case let .Success(response):
switch response.statusCode {
case 200..<300:
do {
let json = try NSJSONSerialization.JSONObjectWithData(response.data, options: .MutableContainers)
let contractualDocument = Mapper<T>().map(json)
completionHandler(response: contractualDocument!, error: nil)
} catch _ {
// Unexpected error when the response can't be parsed
completionHandler(response: nil, error: StoreError.UnexpectedError)
}
case 500:
completionHandler(response: nil, error: StoreError.ServerError)
default:
completionHandler(response: nil, error: StoreError.HTTPError(statusCode: response.statusCode))
}
case .Failure(_):
completionHandler(response: nil, error: StoreError.NetworkError)
}
}
}
}
Мой вопрос заключается в том, могу ли я получить те же результаты, используя дженерики на уровне функций, а не на уровне классов:
func performRequest<T: Mappable>(target: Target, completionHandler: (response: T?, error: StoreError?) -> Void) {
provider.request(target) { result in
switch result {
case let .Success(response):
// blah, blah
case .Failure(_):
// bleh, bleh
}
}
}
Я попробовал это, и я получаю ошибку сборки в моем коде:
Generic parameter "T" could not be inferred