Так что я только недавно поиграл с 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
}
Есть какие-нибудь указания относительно того, как этого добиться? Заранее спасибо! Что мне здесь не хватает?