я учусь SwiftUI. У меня проблема. Я пытался обновить значение массива, но он не обновляется. Также, пожалуйста, сообщите мне, как создать массив объектов и обновить пользовательский интерфейс. также обновите пользовательский интерфейс и обновите любой объект из массива.
текущий код, который я использую ниже:
@State var unsafeInboxList: [Inbox] = []
private func observeNewChatMessage(userId: String){
let inboxRef = databaseReference.child(DatabaseNode.Root.inbox.rawValue)
.child(userId)
inboxRef.observe(.childAdded, with: { (snapshot) in
guard let value = snapshot.value else { return }
var inbox = Inbox(with: JSON(value))
self.addNew(inboxItem: inbox)
inbox.roomType = .single
self.observeRoomDetails(inbox: inbox)
self.getBlockLeaveLastMessage(roomId: inbox.roomId, completion: { (lastMessage) in
if let lastMessage = lastMessage{
self.update(lastMessage: lastMessage, inbox: inbox)
}else{
self.setLastMessageObserver(inbox: inbox)
}
})
})
}
private let inboxQueue = DispatchQueue(label: "InboxQueue", attributes: .concurrent)
private func addNew(inboxItem inbox: Inbox){
inboxQueue.async(flags: .barrier) {
if let index = self.unsafeInboxList.firstIndex(of: inbox){
_ = self.unsafeInboxList[index]
var nInbox = inbox
nInbox.chatMember = self.unsafeInboxList[index].chatMember
nInbox.chatRoom = self.unsafeInboxList[index].chatRoom
//nInbox.unreadCount = self.unsafeInboxList[index].unreadCount
self.unsafeInboxList[index] = nInbox
}else{
self.unsafeInboxList.append(inbox)
}
self.sortListing()
}
}
private func observeRoomDetails(inbox: Inbox){
let roomRef = databaseReference.child(DatabaseNode.Root.roomInfo.rawValue).child(inbox.roomId)
roomRef.observe(.value, with: { (snapshot) in
if let value = snapshot.value{
let chatRoom = ChatRoom(with: JSON(value))
self.update(inboxItem: inbox, chatRoom: chatRoom)
}
})
}
Здесь, когда я пытаюсь обновить объект с новым чатом, чем значение не обновляется, и я получаю предыдущий входящий объект.
private func update(inboxItem inbox: Inbox, chatRoom: ChatRoom){
inboxQueue.async(flags: .barrier) {
if let index = self.unsafeInboxList.firstIndex(of: inbox){
self.unsafeInboxList[index].chatRoom = chatRoom
// chatroom updated
}
self.sortListing()
}
}