【问题标题】:How can I get error code form Alamofire Response?如何从 Alamofire 响应中获取错误代码?
【发布时间】:2021-09-06 09:30:08
【问题描述】:

这里是示例数据:

Alamofire.AFError.sessionTaskFailed(error: Error Domain=NSURLErrorDomain Code=-1020 "当前不允许数据连接。" UserInfo={_kCFStreamErrorCodeKey=50, NSUnderlyingError=0x281c129a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1020 "( null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask ., _NSURLErrorRelatedURLSessionTaskErrorKey=(

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

),

当我尝试 让 nsError = 错误为 NSError print(error.code) 得到 13 ..而不是 -1020

任何帮助将不胜感激。

【问题讨论】:

  • "如何从 Alamofire 响应中获取错误代码?"错误代码表单?

标签: swift alamofire nserror


【解决方案1】:

你可以试试这个-

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

【讨论】:

  • 我建议转换为更具体的错误类型,而不是 NSError。在这种情况下,您可以转换为 URLError 并访问其 code
【解决方案2】:

如果有人感兴趣,我会添加这样的逻辑

                          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

                                }
                            

【讨论】:

    【解决方案3】:

    你可以从错误或响应中得到它

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

    希望这对你有用。

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2020-06-26
      • 2018-12-29
      • 2020-08-12
      • 2015-05-21
      • 2011-03-02
      相关资源
      最近更新 更多