Warten Sie, bis die Ausführung der Schleife mit asynchronen Netzwerkanforderungen abgeschlossen ist.

Ich möchte, dass eine for-in-Schleife eine Reihe von Netzwerkanforderungen an die Firebase sendet und die Daten dann an einen neuen View-Controller weiterleitet, sobald die Ausführung der Methode abgeschlossen ist. Hier ist mein Code:

    var datesArray = [String: AnyObject]()

        for key in locationsArray {       
            let ref = Firebase(url: "http://myfirebase.com/" + "\(key.0)")
            ref.observeSingleEventOfType(.Value, withBlock: { snapshot in

                datesArray["\(key.0)"] = snapshot.value

            })
        }

        //Segue to new view controller here, and pass datesArray once it is complete 

Ich habe ein paar Bedenken. Wie warte ich zunächst, bis die for-Schleife abgeschlossen ist und alle Netzwerkanforderungen abgeschlossen sind? Ich kann die Funktion observSingleEventOfType nicht ändern, sie ist Teil des Firebase-SDK. Kann ich auch eine Art Race-Bedingung erstellen, indem ich versuche, über verschiedene Iterationen der for-Schleife auf das datesArray zuzugreifen (ich hoffe, das macht Sinn)? Ich habe über GCD und NSOperation gelesen, bin aber etwas verloren, da dies die erste App ist, die ich erstellt habe.

Hinweis: Locations-Array ist ein Array mit den Schlüsseln, auf die ich in Firebase zugreifen muss. Außerdem ist es wichtig, dass die Netzwerkanforderungen asynchron ausgelöst werden. Ich möchte nur warten, bis ALLE asynchronen Anforderungen abgeschlossen sind, bevor ich das datesArray an den nächsten View-Controller übergebe.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage