Возможно, я не совсем понимаю вопрос, поэтому это «бета» ответ, который, возможно, потребуется обновить.
Если посмотреть на код в вопросе, то появятся данные, которые вы хотите отобразить вв порядке убывания - его порядок меняется несколько раз, и в этом нет необходимости.
Он читается в порядке убывания, но затем снова возрастает из-за того, как элементы добавляются в массив;.insert (aScore, at: 0).Но по мере заполнения ячеек tableView считываемые данные снова меняются местами.
Предположим, есть 4 оценки;2, 3, 1, 0
А затем существующий запрос на их чтение по убыванию.
let query = postsRef
.order(by: "highScore", descending: true)
.limit(to: 50)
Закрытие Firestore представит данные в порядке убывания, чтобы их можно было добавить в массив
self.scoresArray = [] //***start with an empty array, and clear it each time
for document in documentSnapshot!.documents {
let dict = document.data()
let name = dict["username"] as! String
let score = dict["highScore"] as! Int
let aScore = ScoreClass(withName: name, andScore: score)
self.scoresArray.insert(aScore) //***NOTE THE CHANGE***
}
Массив будет содержать баллы
[index 0] = 3
[index 1] = 2
[index 2] = 1
[index 3] = 0
Затем для заполнения ячейки для каждой строки
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = topScoresTableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath) as! TableViewCell
let row = indexPath.row
let scoreObject = self.scoresArray[row] //***NOTE THE CHANGE***
let score = scoreObject.score
cell.resultLabel.text = String(score)
return cell
}
Ваш табличный вид будет содержать все баллыпо убыванию.
Обратите внимание, что self.scoresRef = [] необходим, потому что каждый раз, когда новый документ с оценками добавляется, изменяется или удаляется, ВСЕ результаты будут перезагружены, поэтому нам нужно очистить массив и начать каждый новыйвремя.