【问题标题】:Swift firebase query nested child nodesSwift firebase 查询嵌套子节点
【发布时间】:2019-01-03 03:18:38
【问题描述】:

我在 firebase 中进行了以下设置:

然后我查询火力基地:

func getUserInfo(){

var tempUsers = [user]()
           // query for the data 
        let itemRef = Database.database().reference(fromURL: "[url]").child("users")
        itemRef.observe(.value, with: { snapshot in

            for child in snapshot.children {

        if let childSnapshot = child as? DataSnapshot,
            let dict = childSnapshot.value as? [String: Any], 
            let sport = dict["Sport"] as? String, 
            let username = dict["username"] as? String{

                let user = user(sport: sport, username: username)

                tempUsers.append(user)
            }
         }
             self.usersArray = tempUsers                           

        }){ (error) in
            print("the error is: \(error.localizedDescription)")
        }
  }

用户:

    class user {

            var username: String 
            var sport: String
            var teamInfo: [teamInfo]


      init(username: String, sport: String, teamInfo: [teamInfo])
  {
    self.username = username
    self.sport = sport
    self.teamInfo = [teamInfo]

  }
}

struct teamInfo {
  var AwayTeam: String
  var HomeTeam = String
  var Jersey = Int

}

我想知道如何在我的查询中获取团队信息,然后能够将其添加到用户的实例中,我试图将“团队”变成一个字典,但这并没有给出我想要的结果。

【问题讨论】:

    标签: swift firebase firebase-realtime-database


    【解决方案1】:

    首先要做的是:您在username 中有不一致的地方。您的 JSON 将 Username 拼写为大写 U,而代码将 username 拼写为小写 u。由于 Firebase 区分大小写,因此您的代码现在永远不会得到正确的值。

    除此之外,您还可以使用 DataSnapshot.childSnapshot(forPath:) 从嵌套子项中获取值。

    itemRef.observe(.value, with: { snapshot in
        for child in snapshot.children {
    
        if let childSnapshot = child as? DataSnapshot,
            let dict = childSnapshot.value as? [String: Any], 
            let team = childSnapshot.childSnapshot(forPath: "Team/AwayTeam").value as? String;
    

    【讨论】:

    • 有没有办法不包括“Team/AwayTeam”,因为可能不是每个用户都有一个 AwayTeam,因为它可能不在数据中
    • 我不确定您的意思,但主要包括 Team/AwayTeam 作为示例。如果它不存在,team 将是nil。您可以以类似的方式读取其他属性,例如Team/HomeTeam.
    猜你喜欢
    • 2016-12-11
    • 2017-08-03
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 2017-09-10
    相关资源
    最近更新 更多