Swift 如何正确使用queryOrderedByValue
我用Swift编写了此函数,用于获取排行榜,然后将其显示给用户:Swift 如何正确使用queryOrderedByValue,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我用Swift编写了此函数,用于获取排行榜,然后将其显示给用户: @IBAction func onShowLeaderboardTapped(_ sender: Any) { let leaderboardDB = FIRDatabase.database().reference().child("scores").queryOrderedByValue().queryLimited(toLast: 5) leaderboardDB.observeSingle
@IBAction func onShowLeaderboardTapped(_ sender: Any) {
let leaderboardDB = FIRDatabase.database().reference().child("scores").queryOrderedByValue().queryLimited(toLast: 5)
leaderboardDB.observeSingleEvent(of: .value, with: { (snapshot) in
print("leaderboard snapshot:" ,snapshot)
}, withCancel: nil)
}
问题是,当我获取它时,它会给我以下列表:
Ben = 9;
Gabriela = 12;
Ivailo = 7;
Petar = 10;
Vania = 10;
它向我展示了前五名玩家,然后按字母顺序列出了他们。由于这不是一个大问题,我想知道是否有一种方法可以按价值排序
规则如下:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"scores": {
".indexOn": ".value"
}
}
}
DB的组织结构如下:
matchrooms:
users:
scores:
> Ben: 9
> Dimitar: 7
> Gabriela: 12
> Ishest: 6
> Ivailo: 7
> Ivan: 5
> Marina: 3
> Pesho: 3
> Petar: 10
> Rosen: 6
> Vania: 10
> Yasen: 2
因此,我的问题是如何正确使用queryOrderedByValue()
检索前五名玩家,并根据他们的得分列出他们?更改结构
scores
-YUijia099sma
name: "Ben"
score: 9
-Yij9a9jsddd
name: "Dimitar"
score: 7
然后
*在我的iPad上键入,这样它就不会被测试,语法也可能不完美当您对Firebase发起查询时,它会返回与您的查询匹配的项目的键、这些项目的值以及结果中项目的相对顺序。如果您侦听.Value事件,则这三个事件将合并到一个FIRDataSnapshot中 但是,当您随后请求该快照的
值
属性或将该快照打印为一个块时,数据将转换为字典。由于字典只能包含键和值,因此此时项的顺序将丢失。结果是,字典会打印出按键排序的项目
要按顺序获取项目,应使用快照对其进行迭代。子项:
leaderboardDB.observeSingleEvent(of: .value, with: { (snapshot) in
for child in snapshot.children {
print(child.key)
}
}, withCancel: nil)
另见:
leaderboardDB.observeSingleEvent(of: .value, with: { (snapshot) in
for child in snapshot.children {
print(child.key)
}
}, withCancel: nil)