如何更新messageCollectionView单元格内部的数据快速?

问题描述

我想在单元格中显示加载的图像。我试图以这种方式做到这一点:

messages.filter { (mType) -> Bool in
                        mType.messageId == "\(message.id)"
                    }.first?.kind = .photo(ImageMediaItem(image: UIImage(systemName: "photo")!.withTintColor(UIColor.gray,renderingMode: .automatic)))

其中:

var messages = [MessageType]()

但是我看到一条消息说:

Cannot assign to property: 'kind' is a get-only property

所以我决定在此属性添加setter / getter:

struct Message: MessageType {
    var sender: SenderType
    var messageId: String = ""
    var sentDate: Date
    var kind: MessageKind{
        get {
            return self.kind
        }
        set (newValue) {
            self.kind = newValue
        }
    }
}

我使用了这种范围将数据添加到聊天列表:

messages.append(Message(sender: message.fromId == selectedContactID ? otherSender! : currentUser!,messageId: "\(message.id ?? -1)",sentDate: Date().addingTimeInterval(-8600000),kind: mKind))

但是在上述更改之后,我看到了这样的消息:

Extra argument 'kind' in call

我试图浏览文档,但没有找到对我的情况有用的东西。也许有人知道如何解决这个问题?

解决方法

您需要使用struct

获取要更改的对象的索引
if let index = messages.firstIndex(where:{ $0.messageId == "\(message.id)" }) {
   messages[index].kind = .photo(ImageMediaItem(image: UIImage(systemName: "photo")!.withTintColor(UIColor.gray,renderingMode: .automatic)))
}

对于Extra argument 'kind' in call,对于计算的属性,除了在您的情况下,您不应该使其成为computed property,因为实现默认情况下已经存在的

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...