Swift 无法从firebase获取要按顺序追加到数组的数据

Swift 无法从firebase获取要按顺序追加到数组的数据,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,我正试图从firebase云存储中获取数据,并将其按顺序放入阵列中。我了解firebase的异步特性,需要使用调度组等待数据返回。我已经尝试在这里寻找解决方案,但无法使我的代码正常工作。任何帮助都将不胜感激 func ReadMyData() { let dispatchGroup = DispatchGroup() let data = Firestore.firestore().collection("users").document("LdGcPDsSVEtYyrGIHR

我正试图从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)

}

我建议您使用完成而不是调度组。将来您将更多地使用它,因此您将更好地掌握它:

注意:用驼峰大小写的方式命名函数名和变量名。这是迅捷语言的标准

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

当您调用此函数时,您将能够在调用完成时执行下一个操作,从而确保在执行下一个操作之前完成所有数据操作(在本例中是附加到数组中的操作)。

抱歉,这是一个新手。我把这个贴出来作为回答。由于与firebase的异步数据调用混淆,我最初想要一个有序数组。然而,提供的解决方案以及在迷路中使用对象解决了我的问题。希望这是有道理的。谢谢你的帮助

调度组等待数据返回不一定准确。取决于您对数据的处理方式和时间。例如,如果要为tableView填充数据源数组,可以在Firestore闭包中加载dataSource,然后调用tableView.reloadData()。不需要调度。问题是你希望他们井然有序。点什么菜?你姓什么?用uid?到什么时候注册你的应用程序?请注意,由于Firestore的异步特性,
print(Array)
将在加载数组之前执行,并且通常会打印nil。在for循环之后移动它。此外,只需删除分派调用,因为它们不需要,并且数据将有序(您没有指定希望数据如何有序),但是,依赖它们有序可能会有问题。把它们放到字典里,顺序就不重要了。