【问题标题】:Swift - Firebase multiple snapshotsSwift - Firebase 多个快照
【发布时间】:2016-05-27 09:27:40
【问题描述】:

所以我需要从我的 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 调用是最后进行的,这意味着“结果”数组中的变量为空。

我缺少什么吗?

【问题讨论】:

  • Fire 基本调用是异步调用,因此您应该链接所有调用,如果需要并行,则等待所有完成块完成

标签: database swift variables firebase


【解决方案1】:

首先,您遇到了“范围”的问题。在函数或回调内部声明的变量将永远无法从该函数或回调外部访问。

您的问题的一个解决方案可能是这样的:

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

一种更安全但仍然有点麻烦的方法是将回调重构为单独的函数,然后当您的第一个回调完成时,它会调用第二个回调的函数,然后调用该函数第三个回调,然后你可以对你的数据做一些事情。希望这是有道理的

【讨论】:

  • 感谢您的回答。我设法以另一种适合我的意图和目的的方式修复它,但相信这是更正确的答案。
猜你喜欢
  • 2016-05-27
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多