Сейчас я использую этот код для обновления онлайн-статуса пользователя. Каждый раз, когда статус в сети меняется, весь мой TableView перезагружается:
// Get and update the actual online stats for the users
UserApi.shared.getUserOnlineStatus { (onlineStatus) in
if let user = self.users.first(where: {$0.uid == onlineStatus.keys.first}) {
let values = onlineStatus.values.first as? Array<Any>
let onlineStatus = values?[0]
user.onlineStatus = onlineStatus as? Bool
}
self.tableViewUsers.reloadData()
}
}
Я не эксперт, но у меня такое чувство, что мне нужно только перезагрузить затронутую строку.
Как можно Я получаю указанный c IndexPath для
self.users.first (где: {$ 0.uid == onlineStatus.keys.first})
, поэтому Я могу просто перезагрузить строку?
Редактировать, рабочий код:
// Get and update the actual online stats for the users
UserApi.shared.getUserOnlineStatus { (onlineStatus) in
if let user = self.users.first(where: {$0.uid == onlineStatus.keys.first}) {
let values = onlineStatus.values.first as? Array<Any>
let onlineStatus = values?[0]
user.onlineStatus = onlineStatus as? Bool
}
if let index = self.users.firstIndex(where: {$0.uid == onlineStatus.keys.first}) {
self.tableViewUsers.reloadRows(at: [IndexPath(row: index, section: 0)], with: .none)
}
}
}