Массив объекта не обновляется - PullRequest
0 голосов
/ 17 февраля 2020

я учусь 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()

        }
    }
...