升级到 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 typealiases 默认为该错误类型。

此外,如果您有 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 ... }
    }
}