1

我一直在尝试为 diffable 集合视图数据源创建一个部分,该部分可能具有 GenericItem 列表,其中此类将具有类型为 UICollectionView.CellRegistration 的属性 cellRegistration。在这个类之后,所有其他项目都将继承,如下所示:

class GenericItem:  Hashable {
    
    var id = UUID()
    
    var cellRegistration: UICollectionView.CellRegistration<UICollectionViewCell, GenericItem> {
        UICollectionView.CellRegistration<UICollectionViewCell, GenericItem> { _, _, _ in }
    }
    
    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
    
    static func == (lhs: GenericItem, rhs: GenericItem) -> Bool {
        lhs.id == rhs.id
    }
}

final class SomeItem: GenericItem {
    
    let title = "Some title"
    
    override var cellRegistration: UICollectionView.CellRegistration<UICollectionViewCell, GenericItem> {
        UICollectionView.CellRegistration<SomeCollectionViewCell, SomeItem> { cell, indexPath, item in
            cell.populate(with: item)
        }
    }
}

这样我就可以将我想要的任何单元格类型放入此列表,而不必担心在数据源中检查它是哪个项目类型,然后使用相应的 CellRegistration。但我一定是忽略/误解了某些东西,因为无论我如何尝试重写它,我最终都会遇到同样的错误: Cannot convert return expression of type 'UICollectionView.CellRegistration<SomeCollectionViewCell, SomeItem>' to return type 'UICollectionView.CellRegistration<UICollectionViewCell, GenericItem>'

有人可以解释如何使用这个新的 API 创建这样一个系统吗?

谢谢!

4

0 回答 0