在iOS应用中,我们在循环内多次调用observeSingleEvent()
来填充列表:
for i in 1...10 {
ref.child("\(i)").observeSingleEvent(of: .value, with: { (snapshot) in
// Add another value to the list
let value = snapshot.value as? NSDictionary
list.append(value)
// All values are in the list
if list.count == 10 {
reloadView()
}
})
}
我们希望10个调用可以同时或多或少地进行处理,并且当所有调用完成时打算执行操作(如在视图中显示列表)。
我们计算列表中的元素以确定所有调用何时完成,但我们正在寻找一种更有效/更优雅的方法来完成同样的事情。在Swift中是否有更好的方法或者Firebase推荐的更好的方法呢?
答案 0 :(得分:-1)
如果你需要专门一个接一个地调用,你可以尝试一个递归函数。
func observeSingleEventOfValue(with children: [String]) {
var children = children.count > 0 ? children : nil
guard let path = children?.removeFirst() else { return }
ref.child(path).observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
self.list.append(value)
if children!.count > 0 {
self.observeSingleEventOfValue(with: children!)
} else {
self.reloadView()
}
})
}
然后,您将使用子路径数组调用该方法。
observeSingleEventOfValue(with: Array(1...10).map { "\($0)" })
递归地执行此操作将确保按顺序观察孩子 - 一个接一个。