Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift Firebase访问子快照数据_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios Swift Firebase访问子快照数据

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

我目前正在尝试从Swift中的子快照访问数据。以下是我的代码(在Swift 3/Firebase更新之前工作过):

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

我当前已在快照中执行此操作(属于'observeType:.ChildAdded')

我的Firebase DB如下所示:

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)

             }        
       }
    }