Ios Swift Firebase访问子快照数据
我目前正在尝试从Swift中的子快照访问数据。以下是我的代码(在Swift 3/Firebase更新之前工作过): 所以我在这里要做的是创建一个子快照变量(成就),并从中访问子快照数据。成就[0]将只返回第一个值。然而,这似乎不起作用。我应该如何处理这个问题 我当前已在快照中执行此操作(属于'observeType:.ChildAdded') 我的Firebase DB如下所示:Ios Swift Firebase访问子快照数据,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我目前正在尝试从Swift中的子快照访问数据。以下是我的代码(在Swift 3/Firebase更新之前工作过): 所以我在这里要做的是创建一个子快照变量(成就),并从中访问子快照数据。成就[0]将只返回第一个值。然而,这似乎不起作用。我应该如何处理这个问题 我当前已在快照中执行此操作(属于'observeType:.ChildAdded') 我的Firebase DB如下所示: Achievements{ randomId1 { somevalue : somevalue } random
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
}
}
尝试:-
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)
}
}
}
充分发挥你的作用。而您实际的JSON树,很难从您提供的内容中破译出来。我现在向您提供了完整的代码和JSON树。我似乎真的找不到抓取childsnapshot数据的方法,上面的代码返回了一个错误。我还尝试将其定义为[String:AnyObject]——但这只会导致一个nil。更清楚的是,我只想从'Rookie'值返回'yes'。这也是我尝试过的,它会给我留下这样一条错误消息:键入'Any'没有下标成员。尝试将
[FIRDataSnapshot]
替换为[字符串:AnyObject]
Error:“对成员“subscript”的引用不明确。顺便说一句,我刚刚意识到我需要进一步更改代码-因为我希望检索多个成就。换句话说,在“成就”下,我需要有多个childByAutoID,它再次包含我要检索的值。我该如何做?”如果让achievementDictionary=childSnapshot.childAdded as?[String:AnyObject]”显然不起作用。任何DEA?避免在评论中延伸新问题,因此对每天发布的Q数量没有限制。发布不同的Q.:)
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)
}
}
}