Когда я пытаюсь использовать обработчик завершения для передачи массива данных из базы данных Firebase, используя метод наблюдений, он пропускает только первый элемент в базе данных (или ни одного вообще, когда я пытаюсь использовать другие способы).Единственный способ, который я нашел, который работает для передачи массива всех данных в базе данных Firebase, это использование таймера, что является плохой практикой.Как передать завершенный массив данных в базу данных Firebase?
Вот мой код:
func loadHighScore(completionHandler:@escaping (_ scoresArray: [User]?)->()) {
ref.child("Scores").observe(.childAdded, with: { (snapshot) in
var scoresArray:[User] = []
let dictionary = snapshot.value as? [String: AnyObject] ?? [:]
let username = dictionary["Username"] as? String ?? ""
let score = dictionary["High Score"] as? Int ?? 0
let user = User(username: username, highScore: score)
scoresArray.append(user)
completionHandler(scoresArray)
}, withCancel: {(err) in
print("Error downloading profile: \(err)")
completionHandler(nil)
})
}
Я называю эту функцию следующим образом:
Firebase.sharedInstance.loadHighScore() { users in
guard let users = users else { return }
print("users: \(users)")
self.sortedUsers = users.sorted {
$0.highScore > $1.highScore
}
self.tableView.reloadData()
}
Консоль показывает, что за один раз печатается один пользователь, а не массив пользователей.В табличном представлении отображается только один пользователь, а не все.Когда я пытаюсь использовать цикл for с обработчиком завершения, вызываемым вне цикла for, я получаю сообщение о том, что не могу использовать цикл for in.
Как мне обойти использование таймераполучить законченный массив, переданный в функцию, которая вызывает мою функцию наблюдения Firebase?