我一直在尝试为 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 创建这样一个系统吗?
谢谢!