Вложенность URLSession.shared.dataTask в Swift 4 - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь получить данные из api, где возвращенный JSON содержит URL-адреса других частей информации, которые мне нужны, например

"value1" : "data",
"value2": {
    "url": "https://example.com/stuff",
    }

My logi c выглядит следующим образом: 1004 *

func(completion: @escaping ([Data]) -> ()) {
       var classArray = [myClass]()
       URLSession.shared.dataTask(with: url) { (data, _, _) in
                
       guard let data = data else { return }

       do {

           guard let resultArray = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else { return }

           let myObject = myClass(value1: resultArray["value1"]! as! String)

           guard let valueUrl = URL(string: resultArray["value2"]! as! String) else { return }

           URLSession.shared.dataTask(with: valueUrl) { (data, _, _) in
                
                myObject.value2 = data
                classArray.append(myObject)

           }.resume()

           } catch let error {
               print("Failed to create json with error: ", error.localizedDescription)
           }
           completion(classArray)
      }.resume()
   }
}

Это правильный подход или есть лучшие реализации? Пытаясь избежать будущей ситуации с пирамидой судьбы. Я попытался поместить внутренний вызов URLSession в отдельную частную функцию, но в конце все равно получил пустой classArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...