这是我关于 SO 的第一个问题,但我会尽量做到最精确。我已经浏览了所有可能的主题,但没有找到答案。我有一个如图所示的数据库。我正在尝试从所有条目中检索“costAmount”并对其求和,然后将其显示在导航栏中。问题是我不知道如何访问这一级别的数据。有什么建议吗?
数据库结构
这是我想出来的。
func showTitle() {
let title = UILabel()
var sum = 0
title.text = "\(sum)"
self.navigationItem.titleView = title
let ref = Database.database().reference()
ref.child("Users/\(currentUser!)/cars/\((car?.identifier)!)/Costs/costAmount").observe(.childAdded, with: { (snapshot) in
if let cost = snapshot.value as? String {
guard let totalCost = Int(cost) else {return}
sum += totalCost
}
})
}
最佳答案
我不是苹果开发者,但我会尽力帮助:
好吧,您似乎有用户登录到您的应用程序,并且您将他们的 uid 保存在用户节点下。
假设我分析这个对:
您有 3 层嵌套(随机 ID)。
level 1:是用户的uid。
级别 2:是每个用户的汽车 ID。
level 3:是每辆车的成本id。
如果您可以引用这 3 个 ID,您将读取所需的数据。
级别 1:如果您的用户仅登录 auth uid,则此级别很简单。
level 2:当你点击某个用户的汽车时,你必须引用这个。
级别 3:与级别 2 相同,您必须保留引用。
现在是代码:
//database reference
var ref: DatabaseReference!
ref = Database.database().reference()
//user id (level 1)
let userID = Auth.auth().currentUser?.uid
//(level 2)
let carID = ...... its up to you to reference this
//(level 3)
let CostID = ...... its up to you to reference this
//read the costAmount
ref.child("Users").child(userID).child("cars").child(carID).child("Costs").child(CostID)
.child("costAmount").observeSingleEvent(of: .value, with: { (snapshot) in
// Get value
let costAmount= snapshot.value as? Int
// ...
}) { (error) in
print(error.localizedDescription)
}
关于swift - 在 Swift 中检索深度嵌套的 Firebase 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51017126/