这是我在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
}
})
}
答案 0 :(得分:1)
我不是Apple开发人员,但我会尽力提供帮助:
好吧,似乎您有登录到您应用程序的用户,并将其uid保存在“用户”节点下。
假设我正在分析此权利:
您有3个嵌套级别(随机ID)。
级别1:是用户的uid。
级别2:是每个用户的汽车ID。
级别3:每辆车的成本ID。
如果您可以引用这3个ID,则会读取所需的数据。
级别1:如果您的用户仅登录其auth uid,则此操作很容易。
级别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)
}
答案 1 :(得分:0)
感谢您的帮助。一开始我还不太清楚,但是由于您的回答,我想出了一个解决方案。
func showTitle() {
let title = UILabel()
var sum = 0.0
title.text = "\(sum)"
self.navigationItem.titleView = title
title.widthAnchor.constraint(equalToConstant: 100).isActive = true
title.textAlignment = .center
var ref: DatabaseReference!
ref = Database.database().reference()
ref.child("Users/\(currentUser!)/cars/\((car?.identifier)!)/Costs").observe(.childAdded, with: { (snapshot) in
let costObject = snapshot.value as? [String: AnyObject]
let costAmount = costObject?["costAmount"] as! String?
if let numericalCost = Double(costAmount!) {
sum += numericalCost
print(numericalCost)
}
title.text = "\(sum)"
}) { (error) in
print(error.localizedDescription)
}