Я пытаюсь получить данные из 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.