Давайте разберем это на части
Объекты ScoreClass, которые заполняются из Firebase и содержат имя и счет
class ScoreClass {
var name = ""
var score = 0
init(withName: String, andScore: Int) {
name = withName
score = andScore
}
}
Массив для хранения объектов ScoreClass, используемых в качествеисточник данных для tableView
var scoresArray = [ScoreClass]()
Код для чтения Firebase и заполнения массива
func getScoresAndNamesFromFirebaseAndStuffIntoArray() {
let postsRef = self.ref.child("Users")
let query = postsRef.queryOrdered(byChild: "highscore").queryLimited(toLast: 3)
query.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let name = dict["username"] as! String
let score = dict["highScore"] as! Int
let aScore = ScoreClass(withName: name, andScore: score)
self.scoresArray.insert(aScore, at: 0)
}
self.topScoresTableView.reloadData()
})
}
, а затем методы делегирования tableView.Есть три функции для обработки tableView.Это предполагает, что ваша текстовая ячейка в tableView имеет идентификатор NameScoreCell
let textCellIdentifier = "NameScoreCell"
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return scoresArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath as IndexPath)
let row = indexPath.row
let scoreObject = scoresArray[row]
let score = scoreObject.score
let name = scoreObject.name
cell.nameLabel?.text = name
cell.scoreLabel?.text = score
return cell
}