根据另一个结果创建一个URLSession

时间:2018-07-05 18:17:48

标签: ios swift url urlsession

我有一个URLSession被解雇的viewDidLoad。它返回包含图像URL的JSON。因此,为了获得该图像,我从第一个URLSession的完成块中调用的JSON Decoder的完成块中直接激发了另一个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()
}

可以从第一个会话的完成块中创建另一个会话吗?

1 个答案:

答案 0 :(得分:1)

是的,这很好。

但是有一个建议:您应该为图像使用downloadTask而不是dataTask。苹果公司说dataTask是为处理少量数据而设计的,而不是像从图像中获取大量数据那样,如果您想在以后添加该功能,downloadTask将使您能够暂停/恢复下载。