如何在 Swift 上的 Firebase 中获取嵌套键中的值
Posted
技术标签:
【中文标题】如何在 Swift 上的 Firebase 中获取嵌套键中的值【英文标题】:How to get values inside nested keys in Firebase on Swift 【发布时间】:2018-07-28 01:57:41 【问题描述】:我正在尝试在 Firebase 中的两个嵌套键中获取值。
:
我需要将 name 的所有值放入一个数组中。这是我仅访问节点“用户”的代码。我在想我可以一个接一个地使用“queryOrderedByKey”,但在这种情况下,xCode 崩溃并说不允许多个查询。
Database.database().reference().child("user").queryOrderedByKey().observe(.childAdded) (snapshot) in
if snapshot.value != nil
let result = snapshot.value as! [String : AnyObject]
if let name = result["name"] as? String
self.myArray.append(name)
DispatchQueue.main.async(execute:
self.tableView.reloadData()
)
这就是我在打印结果时得到的。
【问题讨论】:
【参考方案1】:这就是答案
Database.database().reference().child("user").observe(.childAdded) (snapshot) in
if let dictinoary = snapshot.value as? [String: Any]
if let myFinalStep = dictinoary["GeneralInformation"] as? [String: Any]
print(myFinalStep["name"])
【讨论】:
此代码将遍历 /users 节点中的每个用户,并在 /user 节点上留下一个观察者,因此如果添加任何用户,此代码将向应用程序发送一个事件。目前尚不清楚这是否是预期的结果,因为最初的问题似乎倾向于根据需要进行;如果是这样,请参阅我的答案。【参考方案2】:Tigran 的答案非常好,但这里有一个替代方案。此代码遍历“用户”节点中的每个子节点,并查看深层路径以获取名称。请注意,这会为用户节点留下一个 childAdded 观察者,因此如果添加了任何其他节点,它将再次触发。
let usersRef = self.ref.child("user")
usersRef.observe(.childAdded, with: snapshot in
if let name = snapshot.childSnapshot(forPath: "GeneralInformation")
.childSnapshot(forPath: "name").value as? String
print(name)
)
如果您想一次性阅读名称而不留下观察者,这里有一个替代方案
let usersRef = self.ref.child("user")
usersRef.observeSingleEvent(of: .value, with: snapshot in
for child in snapshot.children
let snap = child as! DataSnapshot
if let name = snap.childSnapshot(forPath: "GeneralInformation")
.childSnapshot(forPath: "name").value as? String
print(name)
)
我感觉 Swifty,所以如果你不想留下观察者,这里有第三种变体。请注意,如果包含该名称的节点不存在,则结果数组将在该索引处包含“No Name”。
let usersRef = self.ref.child("uses")
usersRef.observeSingleEvent(of: .value, with: snapshot in
let myUsers = snapshot.children.allObjects.map $0 as! DataSnapshot
let names = myUsers.map $0.childSnapshot(forPath: "GeneralInformation")
.childSnapshot(forPath: "name")
.value as? String ?? "No Name"
print(names)
)
【讨论】:
以上是关于如何在 Swift 上的 Firebase 中获取嵌套键中的值的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3.0,Firebase:如何获取最后添加的记录
如何在 Swift 的 Firebase Firestore 中获取当前文档 ID?