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?

Благодаря!

0 ответов

Другие вопросы по тегам