任何人都可以帮助从 FirebaseDatabase 获得 2 级深度字典吗?

Posted

技术标签:

【中文标题】任何人都可以帮助从 FirebaseDatabase 获得 2 级深度字典吗?【英文标题】:Can anyone helpe getting 2 level depth dictionary from FirebaseDatabase? 【发布时间】:2019-10-25 10:09:29 【问题描述】:

我有这个 FirebaseDatabase 结构:

我需要从 Firebase 检索数据。 通常我使用这样的函数:

funfunc getWodsFromDataBase () 
    print ("Get Wods From Data Base (AppDelegate)")
    let wodDb = Database.database().reference().child("wods")

    wodDb.observe(.childAdded)  (snapshot) in let snapValue = snapshot.value as! Dictionary<String, Any>



        let girl_hero = snapValue["girl_hero"]!
        let nombre = snapValue["nombre"]!
        let wod = Wod(
            girl_hero : girl_hero  as! String,
            nombre : nombre  as! String,
        )
        self.wodsArray.append(wod)
    

检索第一级值很容易,但我不知道如何获取第二级(练习)的每个值以及如何更新我现在这样的 wods 结构:

struct Wod 
    var girl_hero : String
    var nombre : String    
    init ()
        self.girl_hero = ""
        self.nombre = ""
    
    init (
          girl_hero : String,
          nombre : String)
    
        self.girl_hero = girl_hero
        self.nombre = nombre

    

谁能帮我重写我的结构并从 Firebase 获取数据?

【问题讨论】:

【参考方案1】:

听起来您想在快照中循环遍历 exercises 节点的子节点。你可以这样做:

let wodDb = Database.database().reference().child("wods")

wodDb.observe(.childAdded)  (snapshot) in 
    let snapValue = snapshot.value as! Dictionary<String, Any>

    let girl_hero = snapValue["girl_hero"]!
    let nombre = snapValue["nombre"]!

    let exercises_snapshot = snapshot.childSnapshot(forPath: "exercises")

    for child in exercises_snapshot.children 
        let exercise_snapshot = child as! DataSnapshot
        let exercise_value = exercise_snapshot.value as! Dictionary<String, String>

        let exercise_name = exercise_value["name"]
        ...
    
    ...

以上代码中的新东西:

使用childSnapshot(forPath:)DataSnapshot 的形式访问exercises 属性。 Loop over the DataSnapshot.children 这个。

【讨论】:

【参考方案2】:

希望这对您有所帮助。根据您的要求使用可选项。

struct WordSelector:Codable 
    let word:[Exrcices]


struct Exrcices:Codable 
    let detail:[Deatil]
    let girl_hero: String
    let nombre: String


struct Deatil:Codable 
    let name: String
    let peso: String?
    let reps: String

【讨论】:

但是如何从 Firebase 中获取数据?你能给我指路吗? 如果我们的结构确认 Codable 协议,我们可以在 swift 中解析一行数据,例如 User user = dataSnapshot.getValue(WordSelector.class);同样应该以您的语言提供。不知道对你有没有帮助 它对我有帮助,但我不知道如何调用 firebase getter 在 Swift 中获取这些数据 firebase.google.com/docs/firestore/query-data/get-data 选择了 swift 选项,这可能对您有所帮助

以上是关于任何人都可以帮助从 FirebaseDatabase 获得 2 级深度字典吗?的主要内容,如果未能解决你的问题,请参考以下文章

我不想在选择标签中设置第一个选项的状态怎么做任何人都可以帮助我

任何人都可以追踪这个程序,以帮助我更好地掌握递归的工作原理

将构建定义从 TFS 迁移到 VSTS

任何人都可以帮助以下链接修改光标

任何人都可以帮助 jquery 中的功能吗?

任何人都可以帮助我宽度颤振吗?