Фактически для каждого рендеринга ячейки вы выбираете всех пользователей из вашей базы данных Firebase. Последний звонок каждого пользователя - это пользователь, которого вы видите несколько раз. Он отменяет предыдущие.
Чтобы решить вашу проблему, вы можете хранить пользователей в массиве.
var users = [User]()
Чтобы заполнить этот массив, вы вызываете аналогичную функцию, подобную этой, в вашем viewDidLoad
func fetchUsers() {
Database.database().reference().child("users").observeSingleEvent(of: .childAdded) { (snapshot: DataSnapshot) in
if let dict = snapshot.value as? [String : Any] {
let user = User()
//set user properties here
users.append(user)
}
}
}
Когда вы загрузили всех пользователей, вы должны перезагрузить свой collectionView
collectionView.reloadData()
В функции cellForItemAt теперь вы можете получить доступ к пользователям
let user = users[indexPath.row]
Используйте переменную пользователя для настройки вашей ячейки