Я озадачен тем, что является лучшим способом для достижения этой цели.Я пытаюсь сохранить промежуточный итог значений Double, которые я перебираю и складываю вместе с помощью сетевого вызова.Все, что я прочитал, говорит об использовании DispatchGroup.Мое завершение либо вызывает слишком рано, либо вообще не вызывается, и я попробовал каждую конфигурацию .enter, .leave и .wait, о которой я могу подумать.
let group = DispatchGroup()
var runningTotal: Double = 0.00
ref.observeSingleEvent(of: .value) { (snapshot) in
guard let bills = snapshot.value as? [String: AnyObject] else {
//error
return
}
for billId in bills.keys {
group.enter()
print("Entering")
Database.database().reference().child("bills").child(billId).observeSingleEvent(of: .value, with: { (snapshot) in
guard let bill = snapshot.value as? [String: AnyObject] else {
return
}
if let amount = bill["amount"] as? Double {
runningTotal += amount
}
group.leave()
print("Leaving")
})
}
completion(runningTotal)
}
group.wait()
}