所以我需要从我的firebase数据库中的不同路径捕获内容并将它们保存到一个数组中,以便我可以将它们放入图表中。
有没有办法可以获取snapshot.Value
并将其保存到一个变量中,然后可以在代码中稍后访问该变量?
这是显示我正在尝试做的代码:
override func viewDidLoad() {
super.viewDidLoad()
leave.observeEventType(.Value, withBlock: { snapshot in
let vaiable = snapshot.value
})
remain.observeEventType(.Value, withBlock: { snapshot in
let variableTwo = snapshot.value
})
undecided.observeEventType(.Value, withBlock: { snapshot in
let vaiableThree = snapshot.value
})
let options = ["Remain", "Leave", "Undecided"]
let results = [variable, variableTwo, variableThree]
setChart(options, values: results)
但我相信firebase调用是最后的,这意味着'results'数组中的变量是空的。
我缺少什么?
答案 0 :(得分:0)
首先,你有'范围'的问题。函数或回调内部声明的变量永远不会从该函数或回调的外部访问。
您的问题的一个解决方案可能是这样的:
var results: [FIRDataSnapshot] = []
override func viewDidLoad() {
super.viewDidLoad()
leave.observeEventType(.Value, withBlock: { snapshot in
self.results.append(snapshot.value)
})
remain.observeEventType(.Value, withBlock: { snapshot in
self.results.append(snapshot.value)
})
undecided.observeEventType(.Value, withBlock: { snapshot in
self.results.append(snapshot.value)
})
但是现在你真的没有办法知道你的results
数组实际上是否填充了任何数据,或者回调是否还要完成。
更安全,但仍然有点麻烦的方法可能是将你的回调重构为单独的函数,然后当你的第一个回调完成时,它调用第二个回调的函数,然后调用函数为第三次回调然后你可以对你的数据做些什么。希望有意义