我有这个函数从中获取用户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)
}
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
plaaaaayyyyyaaaaa("inovoID",{name = Tatiana; points = 6;})plaaaaayyyyyaaaaa key inovoID plaaaaayyyyyaaaaa.value {name = Tatiana; points = 6; } aaaa i id可选("inovoID")
问题是我无法获得用户的名称和要点.当我尝试使用:
print(playa.key["name"])
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:
无法使用类型为"String"的索引下标"String"类型的值
有谁可以帮我这个,拜托?
因为你的JSON是
"inovoID" : { "name" : "Tatiana", "points" : 6 }
Run Code Online (Sandbox Code Playgroud)
playa.key 是 "inovoID"playa.value 是 { "name" : "Tatiana", "points" : 6 }的关键是String,不能下标.这就是错误所说的.
您需要订阅值并安全地转换类型以帮助编译器.
if let person = playa.value as? [String:Any] {
print(person["name"] as! String)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29957 次 |
| 最近记录: |