Невозможно получить данные из Firebase для добавления в массив в порядке - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь получить данные из моего облачного хранилища Firebase и упорядочить их в массив. Я понимаю асинхронную природу firebase и что мне нужно использовать группы рассылки для ожидания возврата данных. Я попытался посмотреть на решения здесь, но не могу заставить мой код работать. Любая помощь будет принята с благодарностью

func ReadMyData() {
    let dispatchGroup = DispatchGroup()

    let data = Firestore.firestore().collection("users").document("LdGcPDsSVEtYyrGIHR1D")

        data.getDocument { (document, error) in

            for item in (document?.data())! {
                dispatchGroup.enter()
                self.Array.append(item.key)
                dispatchGroup.leave()
            }
            dispatchGroup.wait()
    }

    print(Array)

}

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Извините, новичок в использовании этого. Я отправил это как ответ. Первоначально я хотел упорядоченный массив из-за путаницы с асинхронным вызовом данных из Firebase. Однако предоставленное решение, наряду с использованием объектов в заблуждениях, решило мою проблему. Надеюсь, что это имеет смысл. Спасибо за вашу помощь!

0 голосов
/ 04 октября 2019

Я бы предложил вам использовать завершение вместо DispatchGroup. В будущем вы будете использовать его гораздо чаще, поэтому лучше освоите его:

PS: присвойте именам ваших функций и имен переменных верблюжий случай. Это норма в языке Swift.

func readMyData(completion: () -> ()) {

    let data = Firestore.firestore().collection("users").document("LdGcPDsSVEtYyrGIHR1D")

    data.getDocument { (document, error) in

        for item in (document?.data())! {
            self.myArray.append(item.key) //using Array as the name of an array is bad practice.
        }
        print(myArray)
        completion()
    }
}

Когда вы будете вызывать эту функцию, вы сможете выполнять следующее действие при вызове завершения, таким образом гарантируя, что все ваши манипуляции с данными, в этом случаедобавление к вашему массиву завершено перед выполнением следующих действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...