CollectionVIew Композиционный макет с несколькими типами данных - PullRequest
0 голосов
/ 06 апреля 2020

Так что я только недавно поиграл с Compositional Layouts с Diffable DataSource и до сих пор люблю его. Но все мои усилия включали в себя один тип элемента данных.

Я пытаюсь достичь двух разных типов списков, скажем Car и Airplane

. Что я сделал, так это создал макеты, создал Enum

enum DataItem: Hashable{
        case cars(Car)
        case airplane(Airplane)
 }

И инициализация источника данных:

func configureDataSource(){
        dataSource = UICollectionViewDiffableDataSource
        <Section, DataItem>(collectionView: collectionView) {
            (collectionView: UICollectionView, indexPath: IndexPath, dataItem: DataItem) -> UICollectionViewCell in

            switch dataItem {
            case .cars(let car):
                guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CarCell.reuseIdentifier, for: indexPath) as? CarCell else {fatalError("Couldn't Create New Cell")}
                ....
                return cell
            case .airplanes(let airplane):
                guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: AirplaneCell.reuseIdentifier, for: indexPath) as? AirplaneCell else {
                    fatalError("Couldn't Create New Cell")
                }
                ....
                return cell
            }
        }
        dataSource.apply(snapshotForCurrentState(), animatingDifferences: false)
    }

Теперь часть, в которой я застрял, создает моментальный снимок .

В идеале, я хотел бы сделать это:

func snapshotForCurrentState() -> NSDiffableDataSourceSnapshot<Section, DataItem>{
    var snapshot = NSDiffableDataSourceSnapshot<Section, DataItem>()
    snapshot.appendSections(Section.allCases)
    snapshot.appendItems([cars], toSection: Section.cars)
    snapshot.appendItems([airplanes], toSection: Section.airplanes)
    return snapshot
}

Есть какие-нибудь указания относительно того, как этого добиться? Заранее спасибо! Что мне здесь не хватает?

...