根据另一个的结果创建一个 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 适用于少量数据,而不是像从图像中获取的大量数据,如果您想在路.