Я пытаюсь изменить массив объектов, которые я извлекаю из асинхронного вызова, с результатами другого асинхронного вызова.В основном я получаю массив результатов, и есть поле messages
, которое возвращается ноль из моего вызова на сервере.Затем мне нужно сделать еще один серверный вызов с id каждого result
в цикле for, чтобы получить массив messages
.Затем я устанавливаю messages
на возвращаемое значение.
Я только что узнал об использовании DispatchGroup () около 20 минут назад от https://stackoverflow.com/a/48718976/3272438,, так что терпите меня.
Проблема, которую я получаю, заключается в том, что когда я выполняю print ("C0: (self.res)") , он распечатывает все элементы, включая messages
, который я только что добавил.Когда print ("C2: (self.res)") печатает в group.notify(...)
, все поля messages
выводят nil .Я в тупике и перепробовал все, что мог придумать.Любая помощь будет высоко ценится.
ОБНОВЛЕНИЕ При изменении следующей group.notify () никогда не вызывается
Service.getMessages(resultId: self.res![index].id, completionHandler: { (latestMessage, response, error) in
if let latestMessage = latestMessage {
self.res![index].messages = [latestMessage]
print("L2: \(self.res![index].messages)")
print("C0: \(self.res)")
}
group.leave() // continue the loop
})
ViewController.Swift
var res: [ResultDTO]?
override func viewDidLoad() {
super.viewDidLoad()
let group0 = DispatchGroup()
group0.enter()
Service.getResults { (results, response, error) in
guard var results = results else { print("PROBLEM"); return }
self.res = results
group0.leave()
}
group0.notify(queue: .main) {
print("in group0")
let group = DispatchGroup() // initialize
for index in 0..<self.res!.count {
group.enter() // wait
Service.getMessages(resultId: self.res![index].id, completionHandler: { (latestMessage, response, error) in
if let latestMessage = latestMessage {
self.res![index].messages = [latestMessage]
print("L2: \(self.res![index].messages)")
print("C0: \(self.res)")
}
})
group.leave() // continue the loop
}
group.notify(queue: .main) {
print("In group notify")
do {
print("C2: \(self.res)")
for index in 0..< self.res!.count {
print("L4: \(self.res![index].messages)")
}
// ... configure my view with the data
} catch {
print("Error: \(error)")
}
}
}
}