我正试图从我的Firebase数据库中获取第一个密钥,但是由于某种原因,什么都没有打印出来。如何使用.childAdded
let userMessagesRef = Database.database().reference().child("user-message").child(uid).child(userId)
userMessagesRef.observe(.childAdded, with: { (snapshot) in
guard let first = snapshot.children.allObjects.first as? DataSnapshot else { return }
print(first)
答案 0 :(得分:0)
从数据库中检索项目列表时通常使用child_added事件。与返回位置的全部内容的值不同, child_added会为每个现有子级触发一次,然后每次将新的子级添加到指定路径时都会触发一次。事件回调传递给包含新子数据的快照。为了排序,还传递了第二个参数,其中包含前一个子项的键。
发件人:Read and Write Data on iOS
根据您的要求,可以在.value
和childAdded
中实现。
var child_array = [String:String]
let userMessagesRef = Database.database().reference().child("user-message").child(uid).child(userId)
userMessagesRef.observe(.childAdded, with: { (snapshot) in
let value = snapshot.value as? String ?? "Empty String"
let key = snapshot.key
child_array[key] = value;
}) { (error) in
print(error.localizedDescription)
}
然后:
if let first = child_array.first?.key {
print(first) // First Key
}
大提示:child_added会随机收集此数据,永远不要使用它来对数据进行排序
答案 1 :(得分:0)
如果您确实在问如何仅获得节点的第一个孩子,这将非常容易。这是仅获取/ users节点的第一个孩子的方法
func getFirstChild() {
let usersRef = self.ref.child("users")
usersRef.observeSingleEvent(of: .childAdded, with: { snapshot in
print(snapshot)
})
}
或
print(snapshot.key)
如果您只想要钥匙。
或者,如果您想使用查询执行相同的操作
func getFirstChildAgain() {
let usersRef = self.ref.child("users")
let query = usersRef.queryOrderedByKey().queryLimited(toFirst: 1)
query.observeSingleEvent(of: .value, with: { snapshot in
print(snapshot)
})
}