升级到 Alamofire 5.x
Upgrading to Alamofire 5.x
我正在尝试升级到 Alamofire 5.x 但有一行让我受阻:
private static func request<T: Codable> (_ urlConvertible: URLRequestConvertible) -> Observable<T> {
return Observable<T>.create { observer in
let request = AF.request(urlConvertible).responseJSON { (response: DataResponse<T>) in ... }
}
}
响应似乎不再是单一类型,因为 XCode 抱怨 "Generic type 'DataResponse' specialized with too few type parameters (got 1, but expected 2)"
关于我做错了什么的想法?
在 Alamofire 5rc1 中,DataResponse
和其他响应类型变得双重泛型,从响应序列化的值和产生的错误类型。默认情况下,Alamofire 的响应处理程序将始终产生 AFError
错误值,因此现在有 AF*Response
typealias
es 默认为该错误类型。
此外,如果您有 Codable
类型,则不应使用 responseJSON
,只需使用 responseDecodable
:
private static func request<T: Codable> (_ urlConvertible: URLRequestConvertible) -> Observable<T> {
return Observable<T>.create { observer in
let request = AF.request(urlConvertible).responseDecodable(of: T.self) { response in ... }
}
}
我正在尝试升级到 Alamofire 5.x 但有一行让我受阻:
private static func request<T: Codable> (_ urlConvertible: URLRequestConvertible) -> Observable<T> {
return Observable<T>.create { observer in
let request = AF.request(urlConvertible).responseJSON { (response: DataResponse<T>) in ... }
}
}
响应似乎不再是单一类型,因为 XCode 抱怨 "Generic type 'DataResponse' specialized with too few type parameters (got 1, but expected 2)"
关于我做错了什么的想法?
在 Alamofire 5rc1 中,DataResponse
和其他响应类型变得双重泛型,从响应序列化的值和产生的错误类型。默认情况下,Alamofire 的响应处理程序将始终产生 AFError
错误值,因此现在有 AF*Response
typealias
es 默认为该错误类型。
此外,如果您有 Codable
类型,则不应使用 responseJSON
,只需使用 responseDecodable
:
private static func request<T: Codable> (_ urlConvertible: URLRequestConvertible) -> Observable<T> {
return Observable<T>.create { observer in
let request = AF.request(urlConvertible).responseDecodable(of: T.self) { response in ... }
}
}