获取信息,无论Firebase(Swift)中的孩子数量如何

时间:2016-07-25 08:21:52

标签: ios swift xcode firebase firebase-realtime-database

这是我的树:

enter image description here

我想获得d值("its d"

但我没有打印任何信息

ref.queryOrderedByChild("userA")
            .observeSingleEventOfType(.Value, withBlock: { (snapshot) in
                if snapshot.exists() {
                    for child in (snapshot.value?.allValues)! {
                        if let fruits = child["c"] as? [String:String]{
                            let name = fruits["d"]
                            print(name)
                            }
                    }

2 个答案:

答案 0 :(得分:1)

这是具体问题的答案:

  

获取信息,无论Firebase中的孩子数量

不确定这是不是你想要的。

要进入'd',您不需要查询。您可以直接访问该数据。

这是我的结构(与你的相匹配)

"the_users" : {
    "a" : {
      "b" : {
        "c" : {
          "d" : "It's d"
        }
      }
    }
  }

以及获取'd'值的代码

let theUsersRef = rootRef.child("the_users")
let dRef = theUsersRef.child("a/b/c/d")
dRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
     let msg = snapshot.value as! String
     print(msg)
})

和输出

It's d

答案 1 :(得分:0)

当您调用queryOrderedByChild("userA")时,它会告诉数据库按userA属性的原始值排序。由于在您的JSON中没有具有原始值的userA属性,因此order by语句没有意义。

您不会过滤查询中的数据,因此您将获得包含附加侦听器的位置的所有数据的快照。从您的代码示例中不清楚它是什么位置,但它很可能在JSON树中比在孩子c存在时更高。这意味着你不打印任何名字。

如果你简单地打印所有孩子,可能会更清楚:

ref.queryOrderedByChild("userA")
   .observeSingleEventOfType(.Value, withBlock: { (snapshot) in
       if snapshot.exists() {
           for child in (snapshot.value?.allValues)! {
               print(child.key)
               if let fruits = child["c"] as? [String:String]{
                   let name = fruits["d"]
                   print(name)
               }
           }
       }
   })