我正在阅读与URLSession
和URLSessionTask
相关的几个示例,其中显示了代码段和/或示例项目可供下载。示例是关于使用URLSessionDataTask
向REST服务请求某些信息的常见情况,其中大多数都具有与此类似的类:
var defaultSession: URLSession
var dataTask: URLSessionDataTask?
override init() {
let configuration = URLSessionConfiguration.default
self.defaultSession = URLSession(configuration: configuration, delegate: nil, delegateQueue: self.operationQueue)
super.init()
}
func callService(with searchUrl: URL, completion: @escaping (Data?, URLResponse?, Error?) -> Void) {
dataTask = defaultSession.dataTask(with: searchUrl, completionHandler: completion)
dataTask?.resume()
}
我发现通常会保留对dataTask
的引用,但不会在该函数之外的任何其他位置使用它。哪个是保留对dataTask
的引用的原因?
答案 0 :(得分:3)
如果您只想执行一次数据任务,则无需继续引用URLSessionDataTask
实例。您只需执行defaultSession.dataTask(with: searchUrl, completionHandler: completion).resume()
但是,如果要在完成执行之前暂停或取消它,保留对URLSessionDataTask
实例的引用会非常有用。
您的callService
方法似乎也有拼写错误。 withUrl
输入参数在任何地方都没有使用,但是引用了searchUrl
,这不是输入参数,所以我想你想要调用URL
输入参数{{ 1}}。
searchUrl