You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中使用@resultBuilder实现声明式UICollectionView时单元格为空如何解决?

问题根源

单元格内容为空的核心原因是你在列表单元格的注册逻辑中,完成内容配置后没有将配置对象赋值给单元格对应的属性,导致配置的文本、图片没有被渲染。
你在configureDataSource方法里的CellRegistration闭包中,创建了content配置对象并设置了image和text属性,但没有执行cell.contentConfiguration = content这一步,所有配置都没有生效。

修复方案

只需要修改configureDataSource方法中的CellRegistration闭包,补充配置赋值逻辑即可,修改后代码如下:

private func configureDataSource() {
    let cellRegistration = UICollectionView.CellRegistration<UICollectionViewListCell, ListItem> {
        (cell, indexPath, item) in
        
        var content = cell.defaultContentConfiguration()
        content.image = item.image
        content.text = item.title
        // 补充这一行即可修复内容不显示的问题
        cell.contentConfiguration = content
    }
    
    data = UICollectionViewDiffableDataSource<Section, ListItem>(collectionView: self) {
        (collectionView: UICollectionView, indexPath: IndexPath, identifier: ListItem) -> UICollectionViewCell? in
        
        let cell = collectionView.dequeueConfiguredReusableCell(using: cellRegistration, for: indexPath, item: identifier)
        cell.accessories = [.disclosureIndicator()]
        return cell
    }
}

关于在UICollectionView内部定义dataSource的问题

完全可以,你当前的实现本身就是合法的:将DiffableDataSource作为自定义List子类的私有存储属性,符合封装原则,不需要额外调整。如果后续需要支持数据更新,你可以在List类中对外暴露更新快照的方法即可。


内容的提问来源于stack exchange,提问作者Niklas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:45:03