Swift: код ошибки Alamofire RequestInterceptor - PullRequest
0 голосов
/ 02 марта 2020

Я реализовал повтор для моего Alamofire запроса как RequestInterceptor. Я получаю коды ошибок Alamofire и отображаю сообщения об ошибках на основе кода ошибки.

Но если повторная попытка не удалась, возвращается:

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

И я не могу получить доступ к коду ошибки, потому что это ноль , Для сценария успеха я могу получить доступ к коду ошибки:

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