Swift: Alamofire RequestInterceptor error code

Viewed 559

I implemented retry to my Alamofire request as RequestInterceptor. I am getting the Alamofire error codes and display error messages based of error code.

But if retry fails it returns:

requestRetryFailed(retryError: Alamofire.AFError.responseValidationFailed(reason: Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(code: 401)), originalError: Alamofire.AFError.responseValidationFailed(reason: Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(code: 401)))

And I can not access the error code because it is nil. For the success scenario I can access the error code with:

let errorCode = error.asAFError?.responseCode


func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
        guard let response = request.task?.response as? HTTPURLResponse else {
            return completion(.doNotRetryWithError(error))
        }

        if (response.statusCode == 403 || response.statusCode == 401) && self.numberOfRetries < 1 {
            self.numberOfRetries += 1
            self.refreshToken(session: session, router: LoginRouter.refreshToken) {(result: Result<LoginModel, Error>) in
                switch result {
                case .success(let result):
                    self.saveRefreshToken(result)
                    completion(.retryWithDelay(0.3))
                case .failure(let error):
                    completion(.doNotRetryWithError(error))
                }
            }
        }else {
            completion(.doNotRetryWithError(error))
        }
    }
0 Answers
Related