如何快速更新消息 CollectionView 单元格中的数据?

Posted

技术标签:

【中文标题】如何快速更新消息 CollectionView 单元格中的数据?【英文标题】:How I can update data inside messageCollectionView cell swift? 【发布时间】:2020-10-13 10:44:22 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您需要使用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,计算属性不应在 init 中,此外在您的情况下,您不需要将其设为computed property,因为您实现了默认情况下已经存在的内容

【讨论】:

所以,我无法更新已在我的 collectionview 中安装 kind 的某些单元格? 你的代码范围给了我一个错误Cannot convert value of type 'MessageType' to expected argument type 'Int' 添加对象的索引而不是对象本身作为单元格内的属性顺便说一句,您可以将所有内容委托给 vc 以访问数组 我还是有些看不懂,我必须改变我的消息结构?因为在插入您的答案后,我收到了有关仅获取属性的消息:( 如果需要延迟初始化,请将其更改为 var kind: MessageKindvar kind: MessageKind?

以上是关于如何快速更新消息 CollectionView 单元格中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 StoryBoard 在 UITableViewCell 内快速构建一个 collectionView

如何快速显示每个单元格附近的Collectionview单元格

我在哪里可以获得线程安全的 CollectionView?

如何快速裁剪collectionview单元格之外的部分图像

如何在 iOS 中更新 collectionView?

如何跟踪 collectionView(由 FetchedResultsController 支持)单元格