我希望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
会更好吗?