如何在Swift中获取Firebase的自动生成密钥?

时间:2018-05-22 04:45:21

标签: swift firebase firebase-realtime-database

Firebase structure

我有这样的Firebase结构。那么如何获取并打印出自动生成密钥及其索引的字符串呢?

我的代码但仍打印出10093

databaseReference.child("Message").child(senderId).child(receiverId!).observe(.value, with: { snapshot in
            self.databaseReference.child("Message").child(self.senderId).child(self.receiverId!).child(snapshot.key).observe(.value, with: { (snap) in
                print("aaa \(snap.key)")
    })
})

我错过了什么或出了什么问题?请帮我解决。非常感谢

3 个答案:

答案 0 :(得分:1)

请试一试。

databaseReference.child("Message").child(senderId).child(receiverId!).observe(.value, with: { snapshot in

    if snapshot.childrenCount > 0 {
       for users in snapshot.children.allObjects as! [DataSnapshot] {
            print(users.key)
       }
    }
})

DataSnapshot包含数据库位置的数据。它具有键和值属性。

答案 1 :(得分:1)

当您在firebase中观察到任何引用时,您将获得DataSnapshot作为回报。 快照具有children枚举器属性,您可以在其中枚举每个子项。每个孩子都是另一个DataSnapshot。现在,每个快照都有keyvalue。你想要key?只需使用key属性:

let databaseRef = Database.database().reference(withPath: "Message").child("1577").child("10093")
databaseRef.observe(.value) { (snapshot) in
    snapshot.children.forEach({ (child) in
        if let child = child as? DataSnapshot {
            let key = child.key
            print(key)
        }
    })
}

答案 2 :(得分:1)

let databaseRef = Database.database().reference(withPath: "Message").child("1577").child("10093")
 databaseRef.observe(.childAdded)
    { (snapshot:DataSnapshot) in           
        print(snapshot.key)
    }