Swift中的Firebase JSON树数据检索

时间:2017-10-28 06:53:38

标签: swift firebase

我的Firebase数据结构如下所示:

enter image description here

以下代码用于将标签的值更新为condition的当前值:

import UIKit
import Firebase

class ViewController: UIViewController {

    let conditionRef = Database.database().reference().child("condition")

    @IBOutlet weak var conditionLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        conditionRef.observe(.value) {
            (snap: DataSnapshot) in

            self.conditionLabel.text = (snap.value as! String).description

        }
    }

我想将标签的值更新为test2的值。我尝试了很多东西,但对我来说最有意义的是将常量conditionRef改为:

let conditionRef = Database.database().reference().child("test1").child("test2")

这不起作用,我不知道会发生什么。我已经浏览了Firebase文档和多个YouTube教程,但似乎无法弄清楚这个琐碎的细节。

任何帮助将不胜感激,提前感谢。

1 个答案:

答案 0 :(得分:0)

一种解决方案是创建对您想要值的节点的引用,然后使用以下单个事件观察它:

class ViewController: UIViewController {

    var ref: DatabaseReference!

    override func viewDidLoad() {
       super.viewDidLoad()

       self.ref = Database.database().reference()

       let test2Ref = self.ref.child("fir-2-b1233").child("test1").child("test2")

       test2Ref.observeSingleEvent(of: .value, with: { snapshot in
           let val = snapshot.value as! Int
           print(val)
       })
   }
}

关键是要确保包含要从中获取数据的子节点的完整路径。

和我的Firebase结构

{
  "fir-2-b1233" : {
    "condition" : "foggy",
    "test1" : {
      "test2" : 0,
      "test3" : 0
    }
  }
}