作者:呼吸乱了的声音_648 | 来源:互联网 | 2023-02-09 20:21
1> Luca Angelet..:
如果您希望在完成所有firebase调用后收到通知,则可以使用此代码
let ref = FIRDatabase.database().reference()
ref.child("users/mchen/groups").observeSingleEvent(of: .value, with: { snapshot in
let groupKeys = snapshot.children.flatMap { $0 as? FIRDataSnapshot }.map { $0.key }
// This group will keep track of the number of blocks still pending
let group = DispatchGroup()
for groupKey in groupKeys {
group.enter()
ref.child("groups").child(groupKey).child("name").observeSingleEvent(of: .value, with: { snapshot in
print("Mary is a member of this group: \(snapshot.value)")
group.leave()
})
}
// We ask to be notified when every block left the group
group.notify(queue: .main) {
print("All callbacks are completed")
}
})
它是如何工作的?
涉及4个主要说明.
首先,我们创建一个小组DispatchGroup()
.该值将跟踪待处理块的数量.
let group = DispatchGroup()
然后在开始新的异步调用之前,我们告诉组有一个新的挂起块.
group.enter()
在回调闭包内,我们告诉组一个块已完成其工作.
group.leave()
当进入组的块数变为零时,我们告诉块运行一个闭包.
group.notify(queue: .main) {
print("All callbacks are completed")
}