根据另一个的结果创建一个 URLSession
Creating a URLSession based on the results of another one
我有一个从 viewDidLoad
发射的 URLSession
。它 returns JSON 其中包含 URL 图像。因此,为了获得该图像,我从第一个 URLSession
的完成块调用的 JSON 解码器的完成块触发另一个 URLSession
。这是相关代码:
//THIS IS CALLED FROM viewDidLoad()
let task = urlSession.dataTask(with: url!) { (data, response, error) in
guard error == nil else {
print ("Error while fetching collections: \(String(describing: error))")
return
}
if let data = data, let string = String(data: data, encoding: .utf8) {
print (string)
URL_Request_Handler.parsingJSON(fromData: data, completion: {(result) in
if let result = result {
print ("JSON IS CONVERTED")
print (result)
//This method creates another session and fires it
self.getFinalCollectionFromResult(result)
}
})
}
}
task.resume()
这里是 getFinalCollectionFromResult
方法:
private func getFinalCollectionFromResult(_ result: Result_Collection) {
let task = URLSession.shared.dataTask(with: URL(string:result.cover_photo.url)!, completionHandler: { (data, response, error) in
if error != nil {
print("Errror")
}
if let data = data, let image = UIImage(data: data) {
DispatchQueue.main.async {
self.collection = Collection(title: result.title, image: image)
self.collectionViewLayout.collectionView?.reloadData()
}
}
})
task.resume()
}
可以从第一个会话的完成块创建另一个会话吗?
是的,非常好。
但有一个建议:您应该对图像使用 downloadTask 而不是 dataTask。 Apple 表示 dataTask 适用于少量数据,而不是像从图像中获取的大量数据,如果您想在路.
我有一个从 viewDidLoad
发射的 URLSession
。它 returns JSON 其中包含 URL 图像。因此,为了获得该图像,我从第一个 URLSession
的完成块调用的 JSON 解码器的完成块触发另一个 URLSession
。这是相关代码:
//THIS IS CALLED FROM viewDidLoad()
let task = urlSession.dataTask(with: url!) { (data, response, error) in
guard error == nil else {
print ("Error while fetching collections: \(String(describing: error))")
return
}
if let data = data, let string = String(data: data, encoding: .utf8) {
print (string)
URL_Request_Handler.parsingJSON(fromData: data, completion: {(result) in
if let result = result {
print ("JSON IS CONVERTED")
print (result)
//This method creates another session and fires it
self.getFinalCollectionFromResult(result)
}
})
}
}
task.resume()
这里是 getFinalCollectionFromResult
方法:
private func getFinalCollectionFromResult(_ result: Result_Collection) {
let task = URLSession.shared.dataTask(with: URL(string:result.cover_photo.url)!, completionHandler: { (data, response, error) in
if error != nil {
print("Errror")
}
if let data = data, let image = UIImage(data: data) {
DispatchQueue.main.async {
self.collection = Collection(title: result.title, image: image)
self.collectionViewLayout.collectionView?.reloadData()
}
}
})
task.resume()
}
可以从第一个会话的完成块创建另一个会话吗?
是的,非常好。
但有一个建议:您应该对图像使用 downloadTask 而不是 dataTask。 Apple 表示 dataTask 适用于少量数据,而不是像从图像中获取的大量数据,如果您想在路.