Alamofire 5 获取错误代码以检查互联网连接

Posted

技术标签:

【中文标题】Alamofire 5 获取错误代码以检查互联网连接【英文标题】:Alamofire 5 get error code to check internet connection 【发布时间】:2020-02-18 12:56:30 【问题描述】:

我将 Alamofire 5 用于我的网络层,我已将网络错误定义如下。

我正在检查 response.error.isNetworkError 我总是错误,因为现在我得到的代码是 9 而不是 -1099/

extension Error 
    var code: Int  return (self as NSError).code 
    var domain: String  return (self as NSError).domain 

    var isNetworkError: Bool 
        switch code 
        case NSURLErrorCannotFindHost,
             NSURLErrorDNSLookupFailed,
             NSURLErrorDataNotAllowed,
             NSURLErrorNetworkConnectionLost,
             NSURLErrorNotConnectedToInternet:
            return true

        default:
            return false
        
    


【问题讨论】:

【参考方案1】:

可能会对某人有所帮助。使用新的 Alamofire 5 AFError 可以转换为 NSError。所以,如果你只是需要一个代码,你可以这样做

if let nsError = error as NSError? 
    nsError.code
    ...

如果您需要检查互联网连接。您可以检查某些特定的错误类型,例如:

if let afError = error?.asAFError 
    if afError.isSessionTaskError 
       ...

最后,如果你需要得到 URLError,这可以从底层错误中实现,你应该这样做

if let afError = error?.asAFError 
    if let urlError = afError.underlyingError as! URLError?, urlError.code == URLError.notConnectedToInternet 
        ...

【讨论】:

【参考方案2】:

你可以像这样得到 Http 错误:

    guard let error = (response.error?.underlyingError as? URLError) else  return 
    
    switch error.code 
    case .timedOut:
    // Do SomeThing
    case .notConnectedToInternet:
    // Do SomeThing
    default:
        break
    

【讨论】:

【参考方案3】:
(afError.underlyingError as? NSError)?.errorCode == NSURLErrorNotConnectedToInternet

这应该可以工作

【讨论】:

以上是关于Alamofire 5 获取错误代码以检查互联网连接的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire 首次单击时未获得 json 响应

尝试使用 Alamofire 检查 iOS 设备上的互联网连接

Swift Alamofire 检查等待超时并放置错误

Alamofire:有没有办法在失败的情况下获取响应数据?

无法使用 Alamofire 4.5 在本地连接到自签名证书保护的 Nginx

错误 Alamofire 5 响应成功和响应失败