Я обновляю Network Foundation до Swift (и Alamofire) версии 5.
Один метод, который должен обеспечить «Сериализацию универсального объекта ответа», - выдавать ошибку
Невозможно специализировать неуниверсальный тип 'DataResponseSerializer'
Я думаю, что в Alamofire 5 они сделали Type DataResponseSerializer
неуниверсальным. Есть идеи, как добиться такого же поведения в новейшей версии? К сожалению, я не очень знаком ни с Alamofire, ни с Generics
.
public extension Alamofire.DataRequest {
@discardableResult
func responseDecodableObject<T: Decodable>(completionHandler: @escaping (DataResponse<T>) -> Void) -> Self {
//error is thrown here
let responseSerializer = DataResponseSerializer<T> { request, response, data, error in
guard error == nil else { return .failure(error!) }
let result = DataRequest.jsonResponseSerializer(options: .allowFragments).serializeResponse(request, response, data, error)
switch result {
case .success(let value):
do {
let data = try JSONSerialization.data(withJSONObject: value, options: .prettyPrinted)
return .success(try JSONDecoder().decode(T.self, from: data))
} catch {
return .failure(ErrorSerializer.JSONDecoderFailed(json: "\(value)", errorText: error.localizedDescription))
}
case .failure(let error):
return.failure(error)
}
}
return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
}
}
Я нашел много учебных пособий, которые показывают способы достижения этой цели, но все они используют общий DataResponseSerializer. Например: Средний