swift - 在 Swift 中检索深度嵌套的 Firebase 数据

标签 swift firebase firebase-realtime-database

这是我关于 SO 的第一个问题,但我会尽量做到最精确。我已经浏览了所有可能的主题,但没有找到答案。我有一个如图所示的数据库。我正在尝试从所有条目中检索“costAmount”并对其求和,然后将其显示在导航栏中。问题是我不知道如何访问这一级别的数据。有什么建议吗?

数据库结构

enter image description here

这是我想出来的。

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/

相关文章:

php - 带数据的 Alamofire POST 请求

ios - FIRMessaging 只能从主线程调用

firebase - PluginRegistry 中的注册器已被弃用

java - 进行查询以检索每个大陆的国家/地区 Firebase 实时数据库

javascript - Firebase .get() 与 .once() - 有什么区别?

ios - 尝试从我的应用程序切换到设置,但它似乎又回来了……有点像

iOS 14.5 或 14.6 及以上版本访问共享扩展中的 UIApplication.shared.open 或 UIApplication.shared.openURL 会给出 "APPLICATION_EXTENSION_API_ONLY"

ios - 如何过渡出父级 UINavigationController

swift - 限制 firestore 检索数据的频率

android - 写入数据库时​​,注册后数据库仍然是空的。如何正确地将数据存储到我的数据库中?