Может кто-нибудь помочь получить 2-х уровневый словарь глубины из FirebaseDatabase? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть такая структура FirebaseDatabase:

enter image description here

Мне нужно получить данные из 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, которая теперь выглядит так:

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

    }
}

Может ли кто-нибудь помочь мне переписать мой Struct и получить данные из Firebase?

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Звучит так, как будто вы хотите зациклить дочерние элементы узла 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"]
        ...
    }
    ...
}

Новое в приведенном выше коде:

1 голос
/ 25 октября 2019

Надеюсь, это поможет вам. используйте опционально в зависимости от ваших требований.

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...