私はリーダーボードをフェッチスウィフトで書かれたこの機能を持っているし、ユーザーにそれを示しを使用する方法:適切queryOrderedByValue
@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)
}
問題は、私はそれをフェッチするとき、それは私に次のリストをgavesということです。
Ben = 9;
Gabriela = 12;
Ivailo = 7;
Petar = 10;
Vania = 10;
最初の5人のプレイヤーが表示されますが、アルファベット順に表示されます。これは大きな問題ではないので、値で注文する方法があるのだろうかと思います。
これらはルールです:
{
"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
をだから、私の質問が適切に最初の5人の選手とリストを取得するためにqueryOrderedByValue()
を使用する方法であります彼らは得点でポイントを獲得しましたか?
だから最初に消火器のデータを構造化するのは悪い方法ですが、childByAutoIdによって生成されたノード名を持つ必要があります。これらのノードを照会して、名前やスコアなどで並べ替えることができます。そのまま、あなたが得ている値であるByValをソートしています - B)en、G)abriela、I)vailo(B、G、I、PV) 。 – Jay
私はそれが悪い方法だと知っていれば、私はあなたがchildByAutoId funcで登録されているユーザーノードを持っています。私が生成したリストはfirebaseで遊んでいるだけです。 –