我有一个程序,正在使用Firebase异步调用将数据加载到collectionview中。我的代码如下。如您所见,我使用第一个调度组来确保方法getUserGender()和getUserMatchPreferences()在触发方法checkWhatPoolToDrawFrom()之前已经完成,因为这两个方法都返回必须由该方法访问的导入信息。这部分工作正常。现在,我遇到的问题是因为在完成上述方法之后,我需要调用此方法getArray()以将数据加载到我的collectionView中。我以为可以通过创建第二个调度组并在此方法getArray完成后重新加载数据来做到这一点,但是这种方法不起作用(我知道这是因为在调度组2闭包中,当我打印阵列时,我得到一个空数组)。我究竟做错了什么?构建我的调度组和请求的正确方法是什么?
var userMatchPreferences=String()
var userGender=String()
var poolToDraw5=String()
var peopleArray:[String]=[String]()
var randomNumberArray:[Int]=[Int]()
var finalPeopleArray=[String]()
let dispatchGroup=DispatchGroup()
let dispatchGroup2=DispatchGroup()
override func viewDidLoad() {
super.viewDidLoad()
peopleArray.removeAll()
randomNumberArray.removeAll()
finalPeopleArray.removeAll()
getUserGender()
getUsersMatchPreferences()
dispatchGroup.notify(queue: .main) {
self.checkWhatPoolToDraw()
print(self.poolToDraw5)
self.getArray()
}
dispatchGroup2.notify(queue: .main) {
print(self.finalPeopleArray)
self.collectionView.reloadData()
}
func getUsersMatchPreferences(){
dispatchGroup.enter()
let currentUser=Auth.auth().currentUser!
let dataRef=Database.database().reference()
dataRef.child("Users").child(currentUser.uid).observeSingleEvent(of: .value) { (snapshot) in
if let dictionary=snapshot.value as? [String:AnyObject]{
self.userMatchPreferences=dictionary["AttractedTo"] as! String
self.dispatchGroup.leave()
}
}
}
func getArray(){
dispatchGroup2.enter()
Database.database().reference().child(poolToDraw5).observeSingleEvent(of: .value) { (snapshot) in
let dict=snapshot.value as! NSDictionary
print(dict)
self.peopleArray=dict.allKeys as! [String]
self.getRandomizedNumbers()
for i in 0...self.randomNumberArray.count-1{
let randomNumber=self.randomNumberArray[i]
let randomID=self.peopleArray[randomNumber]
self.finalPeopleArray.append(randomID)
}
for i in 0...self.finalPeopleArray.count-1{
Database.database().reference().child("Users").child(Auth.auth().currentUser!.uid).child("oldPotentialMatches").child(self.finalPeopleArray[i]).setValue(self.finalPeopleArray[i])
}
self.dispatchGroup2.leave()
}
}