Swift – Warten auf den Abschluss der asynchronen for-in-Schleife, bevor der Abschlusshandler Swift aufgerufen wird

Blog

Swift – Warten auf den Abschluss der asynchronen for-in-Schleife, bevor der Abschlusshandler Swift aufgerufen wird

Ich bin verblüfft, wie ich das am besten erreichen kann. Ich versuche, eine laufende Summe von Double-Werten beizubehalten, die ich über einen Netzwerkaufruf durchschleife und addiere. Alles, was ich gelesen habe, sagt, dass ich DispatchGroup verwenden soll. Meine Vervollständigung ruft entweder zu früh auf oder wird überhaupt nicht aufgerufen und ich habe jede Konfiguration von .enter, .leave und .wait ausprobiert, die mir einfällt.



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()

}




#schnell