Firebase 观察并取值到数组

Posted

技术标签:

【中文标题】Firebase 观察并取值到数组【英文标题】:Firebase observing and taking values to an array 【发布时间】:2017-06-19 22:50:35 【问题描述】:

我有五种观察方法,它们从 Firebase 获取五个不同的 INT 值。所有脚本实际上都在工作。如果我打印快照,控制台会显示五个不同的值。在五种观察方法之外,我有一个连接到条形图的数组。我想取第一个值并将其附加到数组的 [0] 等等。 这是我的代码:

let myArray = [1, 2, 3, 4, 5]

    var exampleString = (label.text?.lowercased())!
    ref2 = FIRDatabase.database().reference()
    ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore1").observe(.value, with:  snapshot in

        print(snapshot.value!)

    )
    ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore2").observe(.value, with:  snapshot in

        print(snapshot.value!)

    )
    ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore3").observe(.value, with:  snapshot in

        print(snapshot.value!)

    )
    ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore4").observe(.value, with:  snapshot in

        print(snapshot.value!)

    )
    ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore5").observe(.value, with:  snapshot in

        print(snapshot.value!)

    )

【问题讨论】:

【参考方案1】:

实现目标的一种可能方法是将观察值相互嵌套,这将强制第一次观察完成,并在第二次观察发生之前填充您的数组。

ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore1").observe(.value, with:  snapshot in

myArray.append(snapshot.value) as! Int
ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore2").observe(.value, with:  snapshot2 in

    myArray.append(snapshot2.value) as! Int
    ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore3").observe(.value, with:  snapshot3 in

        myArray.append(snapshot3.value) as! Int
        ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore4").observe(.value, with:  snapshot4 in

            myArray.append(snapshot4.value) as! Int
            ref2.child("parole_chiave").child(exampleString).child(exampleString).child("valore5").observe(.value, with:  snapshot5 in

                myArray.append(snapshot5.value) as! Int

            )

        )

    )

)

请注意,您必须更改每个快照的名称,因为它们现在位于相同的方法中。

【讨论】:

以上是关于Firebase 观察并取值到数组的主要内容,如果未能解决你的问题,请参考以下文章

从可观察到的返回数据的角度 forEach 循环(Firebase 驱动)

Swift 传递数据结构和数组 Firebase

Swift 中的完成处理程序 Firebase 观察者

从 Firebase 读取数据并保存到数组中 (Swift)

在 ChildByAutoId 下从 Firebase 检索数据并添加到数组 - Xcode - Swift

使用 Firebase 观察数据更新 UI (Swift)