我具有从FireBase获取用户并将其转换为Dictionary的功能:

 let leaderBoardDB = FIRDatabase.database().reference().child("scores1").queryOrderedByValue().queryLimited(toLast: 5)
        leaderBoardDB.observe( .value, with: { (snapshot) in
            print("scores scores", snapshot)

            if let dictionary = snapshot.value as? [String: Any] {
                for playa in dictionary {
                    let player = Player()

                    print("plaaaaayyyyyaaaaa", playa)
                    print("plaaaaayyyyyaaaaa key", playa.key)
                    print("plaaaaayyyyyaaaaa.value", playa.value)
                        player.id = playa.key
                    print(playa.key["name"])

                }
            }
          }, withCancel: nil)
    }

我得到这个结果:



问题是我无法获得用户的姓名和积分。当我尝试使用:
print(playa.key["name"])

它给了我这个错误:



有人可以帮我吗?

最佳答案

由于您的JSON是

"inovoID" : { "name" : "Tatiana", "points" : 6 }
  • playa.key"inovoID"
  • playa.value{ "name" : "Tatiana", "points" : 6 }

  • String,无法下标。这就是错误的意思。

    您需要订阅并安全地强制转换类型以帮助编译器。
    if let person = playa.value as? [String:Any] {
       print(person["name"] as! String)
    }
    

    08-06 13:21