好的,我一直在处理一些我真正需要帮助的事情,所以我在这里。我有一个简单的函数,它通过firebase循环并向数组添加数据。这是问题,我需要知道函数完成循环的位置。老实说,我需要一些帮助来解决这个问题,所以这里有一个例子。
func getUsers() {
let ref = Database.database.reference()
if let myAget = self.myAgel {
ref.child("newUsers").observeSingleEvent(of: .value, with: {(snapshoter) in
if let valuer = snapshoter.value as? [String : AnyObject] {
for (one,_) in valuer {
checkCount.append("one")
ref.child("users").child(one).child("age").observeSingleEvent(of: .value, with: {(snap) in
if let agerti = snap.value as? Int {
if myAget - agerti <= 1 && myAget - agerti >= -1 {
print("Add this user")
}
}
})
}
}
print("now do something with those users")
}
})
}
}
**控制台打印:
现在对这些用户做点什么
添加此用户
添加此用户
添加此用户
添加此用户
你可以看到,问题是我想在我检查用户年龄是否接近你之后调用一个函数:+ - 1年。我怎样才能打印出来#34;现在做点什么......&#34;在&#34;添加用户&#34;。非常感谢你!如果你有任何帮助,请回复,我需要任何东西。
答案 0 :(得分:3)
您可以使用DispatchGroup
。在启动每个异步工作单元之前,您需要enter
调度组,并且在该单元完成时需要leave
。您可以使用notify
确定在所有工作完成后执行的闭包。
func getUsers() {
let ref = Database.database.reference()
if let myAget = self.myAgel {
ref.child("newUsers").observeSingleEvent(of: .value, with: {(snapshoter) in
if let valuer = snapshoter.value as? [String : AnyObject] {
let dispatchGroup = DispatchGroup()
for (one,_) in valuer {
dispatchGroup.enter()
checkCount.append("one")
ref.child("users").child(one).child("age").observeSingleEvent(of: .value, with: {(snap) in
if let agerti = snap.value as? Int {
if myAget - agerti <= 1 && myAget - agerti >= -1 {
print("Add this user")
}
}
dispatchGroup.leave()
})
}
dispatchGroup.notify {
print("now do something with those users")
}
}
})
}
}