是否可以在没有childByAutoId()的情况下获取数据库引用。键?

时间:2018-02-08 02:26:41

标签: swift firebase firebase-realtime-database snapshot

有没有办法从父实例动态获取子数据库,而不必使用childByAutoId()?

{
  "artists" : {
    "artists_id_1" : {
      "name" : "Atif Aslam",
      "genre" : "Rock"
    },
    "artists_id_2" : {
      "name" : "Arijit Singh",
      "genre" : "Rock"
    }
  }
}

我们通常会引用路径,并监听数据库中的项目......示例:

Database.database().reference().child("artists").child("artist_id_1").observeSingleEvent(of: .value, with: { (snapshot) in

            if let dictionary = snapshot.value as? [String: AnyObject] {
                print("\(String(describing: dictionary["name"] as? String))")
            }

        }, withCancel: nil)

它只适用于第一项。因为,它不会是动态的。通常使用的是以下示例...

{
  "artists" : {
    "-KeZUDrJv555kteAcssL-" : {
      "name" : "Atif Aslam",
      "genre" : "Rock"
    },
    "-KeZUVXFIQdO7JiyRYk-" : {
      "name" : "Arijit Singh",
      "genre" : "Rock"
    }
  }
}
 Database.database().reference().child("artists").childByAutoId().observeSingleEvent(of: .value, with: { (snapshot) in

            if let dictionary = snapshot.value as? [String: AnyObject] {
                print("\(String(describing: dictionary["name"] as? String))")
            }

        }, withCancel: nil)

无论如何,我不知道是否清楚,在回答之前有什么可以发表评论。谢谢

2 个答案:

答案 0 :(得分:1)

我不知道我是否理解你的问题或者你想要做什么,但也许你可以试试

Database.database().reference().child("artists").observe(.value) { (snap:DataSnapshot) in 

// This should print out your childIds
print(snap.key)

// This should print out the values after them
print(snap.value)



}

答案 1 :(得分:0)

要显示数据库中的所有艺术家,请加载artists节点并循环遍历snapshot.children

Database.database().reference().child("artists").observe(.value) { (snap:DataSnapshot) in 
  for child in snapshot.children {
    print(child.key)
  }
}

对于此示例和更多示例,我建议您阅读Firebase文档,特别是section on reading and writing lists