Swift - Firebase多个快照

时间:2016-05-27 09:27:40

标签: database swift variables firebase

所以我需要从我的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'数组中的变量是空的。

我缺少什么?

1 个答案:

答案 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数组实际上是否填充了任何数据,或者回调是否还要完成。

更安全,但仍然有点麻烦的方法可能是将你的回调重构为单独的函数,然后当你的第一个回调完成时,它调用第二个回调的函数,然后调用函数为第三次回调然后你可以对你的数据做些什么。希望有意义