Upgrading to Alamofire 5.x

Viewed 2053

I am attempting to upgrade to Alamofire 5.x and one line has me blocked:

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 ... }
    }
}

The response does not seem to be a single type anymore as XCode is complaining of "Generic type 'DataResponse' specialized with too few type parameters (got 1, but expected 2)"

Thoughts on what I am doing wrong?

1 Answers

In Alamofire 5rc1, DataResponse and the other response types became doubly generic, to both the value serialized from the response and the error type produced. By default Alamofire's response handlers will always produce AFError error values, so there are now AF*Response typealiases that default to that error type.

Additionally, you shouldn't use responseJSON if you have Codable types, just use 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 ... }
    }
}
Related