取消请求的错误处理

Error handling for cancelled request

我使用Alamofire发送下载请求。我正在处理 SuccessFailure 个案例,如下所示。

Alamofire.request {
     case Success:
          // Update UI
     case Failure:
          // Show Alert message (error!.localizedDescription)
}

一切都很好。

当我返回时,在 viewWillDisappear,我取消了任何正在进行的请求。问题是,取消请求会抛出错误消息,当我不在该屏幕上时会触发警报。

据我所知,我可以执行两个操作。

  1. 如果由于请求取消而产生错误,请检查条件
  2. 检查 viewController 是否存活
  3. 我也可以在viewWillDisappear中设置一个Bool变量,这是一个简单的解决方案

如何处理这种情况?

还有如何检查点 1 和 2?

如果你能找到它失败的原因,你应该继续这样做,所以:Check the condition if the error is created due to request cancel

选项 2 很脆弱,因为您依赖于 UIViewController 的生命周期。选项 3 只会通过一个新标志使您的逻辑更加繁琐。保持简单

注意:使用 aumanets 答案进行故障安全检查

对于想知道如何使用选项 1 的人

您可以检查请求取消错误以了解请求是否被取消

let errorDict = (error as NSError).userInfo;
if let errorString = errorDict["NSLocalizedDescription"] as? String, errorString == "cancelled" {
    // Request is cancelled.
}

本回答来源于@peres的回答。

这是一种更通用的方法,适用于任何设备语言:

Swift 4

if (response.error as NSError?)?.code == NSURLErrorCancelled {
   // Do Your stuff
}

现在应该是:

var isCancelError: Bool {
    guard let afError = self as? AFError else { return false }
    return afError.isExplicitlyCancelledError
}

您可以通过这种通用方法实现它

if let errorCode = (error.underlyingError as NSError?)?.code, errorCode == NSURLErrorCancelled { // for cancelled