В своем чате я показываю текущему пользователю его чаты с другими пользователями в виде таблицы. Каждая ячейка в табличном представлении - это информация, аватар и имя противоположного пользователя. Эти данные легко хранить в объекте чата, но проблема в том, что противоположный пользователь мог изменить свой аватар или имя в этот момент.
Следовательно, я выбираю аватар и имя противоположного пользователя в Конфигурация ячейки чата. Он работает нормально, но я не уверен, что есть лучший способ, так как я не продам сетевой вызов Firebase в каждой ячейке.
Вот мой метод настройки ячейки:
func configureCell(from chat: Chat){
// 1st Get opposite user id
if let currentUser = Auth.auth().currentUser{
let user1 = chat.people.first
let user2 = chat.people.last
let user1Id = user1?["id"] ?? ""
let user2Id = user2?["id"] ?? ""
var oppositeUserId = ""
if user1Id == currentUser.uid{
oppositeUserId = user2Id
}else{
oppositeUserId = user1Id
}
//2nd Fetch opposite user doc
let oppositeUserDocRef = References.Instance.getUserDocRef(for: oppositeUserId)
oppositeUserDocRef.getDocument { (oppositeUserDocSnapshot, error) in
if error != nil{
print("ERROR FETCHING OPPOSITE USER DOC:: ERROR IS: \(error?.localizedDescription ?? "")")
return
}
// 3rd get opposite user avatar url and name
if let otherUserDic = oppositeUserDocSnapshot?.data(){
if let avatarDic = otherUserDic["avatar"] as? [String: String]{
let avatarUrl = avatarDic["url"] ?? ""
self.avatarView.sd_setImage(with: URL(string: avatarUrl),
placeholderImage: nil, options: .refreshCached)
}
if let name = otherUserDic["name"] as? String{
self.uiLabelChatTitle.text = name
}
}
}
}
}