【问题标题】:Swift Firebase Access child snapshot dataSwift Firebase 访问子快照数据
【发布时间】:2017-01-30 02:46:20
【问题描述】:

我目前正在尝试从 Swift 中的子快照访问数据。这是我的代码(在 Swift 3/Firebase 更新之前有效):

 if let achievements = snapshot1.childSnapshotForPath("Achievements").children.allObjects as? [FIRDataSnapshot] {


                    if achievements.count != 0 {

                        if let val = achievements[0].value!["somevalue"] as? Int {
                            self.dict["somevalue"] = val
                        }


                    }

所以我在这里尝试做的是创建一个子快照(成就)的变量,并从中访问子快照数据。成就[0] 将简单地返回第一个值。但是,这似乎不起作用。我应该如何处理?

我目前已经在快照中执行此操作('observeType:.ChildAdded')

我的 Firebase 数据库如下所示:

Achievements{

randomId1 {
somevalue : somevalue
}

randomId2 {
somevalue2 : somevalue2
}
}

更新代码:

 func loadData() {

        ref.child("Players").observe(FIRDataEventType.childAdded) { (snapshot:FIRDataSnapshot) in

            if let value = snapshot.value as? [String:AnyObject], let username = value["Username"] as? String {

            }

            if let value = snapshot.value as? [String:AnyObject], let ranking = value["Rank"] as? String {

            }

            if let childSnapshot = snapshot.childSnapshot(forPath: "Achievements").children.allObjects as? [FIRDataSnapshot] {

                if childSnapshot.count != 0 {

                    if let achievement1 = childSnapshot[0].value!["Rookie"] as? String {
                        print(achievement1)
                    }

                }
            }

        }

    }

JSON 树:

Players {

PlayerID {

Username

Rank

Achievements {

Rookie: yes

}


}

【问题讨论】:

  • 提供你的全部功能。而您的实际 JSON 树,很难从您提供的内容中破译。
  • 我现在已经为您提供了完整的代码和 JSON 树。实在是找不到办法获取childsnapshot数据,上面的代码返回错误。我也尝试将其定义为 [String:AnyObject] - 但这只会导致 nil。
  • 明确地说,我只是想从“Rookie”值返回“yes”。

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

试试看:-

 if let childSnapshot = snapshot.childSnapshot(forPath: "Achievements") as? FIRDataSnapshot{

                if let achievementDictionary = childSnapshot.value as? [String:AnyObject] , achievementDictionary.count > 0{

                    if let achieveMedal = achievementDictionary["Rookie"] as? String {

                        print(achieveMedal)

             }        
       }
    }

【讨论】:

  • 这也是我尝试过的,它给我留下了这样的错误消息:Type 'Any' has no subscript members.
  • 尝试将[FIRDataSnapshot]替换为[String:AnyObject]
  • 错误:'对成员'下标'的模糊引用。
  • 顺便说一句,我刚刚意识到我需要进一步更改代码 - 因为我想要检索多个成就。换句话说,在“成就”下,我需要有多个 childByAutoID,它再次包含我想要检索的值。我该怎么做? '如果让成就字典 = childSnapshot.child 添加为? [String:AnyObject]' 显然不起作用。有死吗?
  • 避免在 cmets 中延伸新问题,所以对于您一天发布的 Q 数量没有限制。发布一个不同的问题。:)
猜你喜欢
  • 2017-01-30
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2020-06-21
相关资源
最近更新 更多