var ergebnisBluetezeit = Set<String>()
let refBluetezeit = rootRef.child("Pflanzen").child("Eigenschaften").child("Blütezeit")
refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in
for plant in snapshot.children {
self.ergebnisBluetezeit.insert((plant as AnyObject).value)
}
})
print(ergebnisBluetezeit)
我想从Firebase数据库检索数据。检索过程确实已经工作了,但是以下内容使我感到困惑:打印的当前输出是一个空集,但是当我在其他地方使用var ergebnisBluetezeit(例如,设置一个按钮,该操作是打印ergebnisBluetezeit)时,它将被填充。当我将打印内容放入for循环中时,它也确实打印了正确的输出。 我似乎不了解这里的控制流程,所以我的问题是: 我该如何使用当前打印语句所在的位置集? 感谢您的帮助。
答案 0 :(得分:0)
这是异步调用的逻辑
print("1") // empty
refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in
print("3") // empty
for plant in snapshot.children {
self.ergebnisBluetezeit.insert((plant as AnyObject).value)
}
print(ergebnisBluetezeit) // not empty
})
print("2") // empty
在请求完成之前,该值一直为空,无论您在代码顺序中的哪个位置运行打印,如上面顺序1,2,3所示,要知道何时完成打印,都可以使用类似
的补全func getData(completion:@escaping() -> ()) {
let refBluetezeit = rootRef.child("Pflanzen").child("Eigenschaften").child("Blütezeit")
refBluetezeit.child("Februar").observeSingleEvent(of: .value, with: { snapshot in
for plant in snapshot.children {
self.ergebnisBluetezeit.insert((plant as AnyObject).value)
}
completion()
})
}
然后致电
getData {
print(ergebnisBluetezeit)
}