DiffableCollectionViewDataSource с разными регистрациями ячеек
Я пытался создать раздел для источника данных представления diffable collection, который мог бы иметь список GenericItem, где у этого класса было бы свойство cellRegistration, которое будет иметь тип UICollectionView.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?
Благодаря!