How can I get error code form Alamofire Response?

2.2k Views Asked by At

Here is the sample data:

Alamofire.AFError.sessionTaskFailed(error: Error Domain=NSURLErrorDomain Code=-1020 "A data connection is not currently allowed." UserInfo={_kCFStreamErrorCodeKey=50, NSUnderlyingError=0x281c129a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1020 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <53E743B6-8487-4955-9C7C-86150C02736D>.<33>, _NSURLErrorRelatedURLSessionTaskErrorKey=(

"LocalDataTask <53E743B6-8487-4955-9C7C-86150C02736D>.<33>"

),

And when I tried let nsError = error as NSError print(error.code) am getting 13 ..instead -1020

Any help would be appreciated.

3

There are 3 best solutions below

1
Tarun Tyagi On

You can try this -

if error.isSessionTaskError, 
   let underlyingError = error.underlyingError as? NSError {
    print(underlyingError.code)
}
0
tp2376 On

I added my logic like this if anyone interested

                          guard let afError = error.asAFError else {

                                    return
                                }
                                switch afError {
                                case .sessionTaskFailed(let sessionError):
                                    let nsError = sessionError as NSError
                                    let acceptableCodes: [Int] = [
                                        NSURLErrorNotConnectedToInternet,
                                        NSURLErrorTimedOut,
                                        NSURLErrorCannotConnectToHost,
                                        NSURLErrorNetworkConnectionLost,
                                        NSURLErrorCannotFindHost,
                                        NSURLErrorDataNotAllowed,
                                    ]

                                    if nsError.domain == NSURLErrorDomain, acceptableCodes.contains(nsError.code) {
                                        
                                    }
                                    else {
                                        
                                    }
                                default: break

                                }
                            
0
Abiú Roldán On

You can get it from the error or the response

AF.request(requestModel).validate().responseData(completionHandler: { response in
            
            // from the response
            print(response.response?.statusCode)

            switch response.result {
            case .success(let data):
                // handler success
            case .failure(let error):
                // from the error
                print(error.responseCode)
            }
        })

Hope this works for you.