Создание URLSession на основе результатов другого - PullRequest
0 голосов
/ 05 июля 2018

У меня есть URLSession, который запускается с viewDidLoad. Возвращает JSON, который содержит URL для изображения. Итак, чтобы получить это изображение, я запускаю еще один 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 голосов
/ 05 июля 2018

Да, это прекрасно.

Но есть одно предложение: вы должны использовать DownloadTask для изображения вместо dataTask. Apple утверждает, что dataTask предназначен для небольших фрагментов данных, а не для больших объемов данных, которые вы получаете с изображения, и downloadTask даст вам возможность приостановить / возобновить загрузку, если вы захотите добавить эту функциональность в будущем.

...