URLSession dataTask:使用URLRequest / URL? ManagingHueler中的OperationQueue?

时间:2017-04-30 15:35:29

标签: ios swift3 nsurlsession nsoperationqueue nsurlsessiondatatask

我希望URLSession执行HTTP网络呼叫并解析其JSON响应。我跟随了一个与我的场景或多或少匹配的示例,我找到了这段代码:

let request = URLRequest(url: url)
let dataTask = myUrlSession.dataTask(with: request, completionHandler: { [unowned self] (data, response, error) in
  guard let data = data else {
    OperationQueue.main.addOperation {
      completion(nil, error)
    }
    return
  }
  self.parseJsonResponse(data, completion: completion)
})

对于我想要理解的一些事情没有任何解释:

  • 如果request未设置任何特定属性,使用它是否有任何好处,而不是仅仅调用myUrlSession.dataTask(with: completionHandler:)来调用URL

  • 为什么OperationQueue.main.addOperation在完成处理程序中使用?我需要能够根据用户交互取消网络操作,但我应该这样做吗?然后,如果需要,我应该如何取消操作?

对于最后一点,我正在考虑另一个版本:

let dataTask = myUrlSession.dataTask(with: url, completionHandler: { [unowned self] (data, response, error) in
  guard let data = data else {
    completion(nil, error)
    return
  }
  self.parseJsonResponse(data, completion: completion)
})

如果我需要取消任务:

dataTask.cancel()

这是一种合适的方法吗?或者使用OperationQueue会更好吗?

0 个答案:

没有答案