Open EastHell opened 2 years ago
Согласен, добавлю.
Но тут есть минимум два варианта решения, осталось выбрать, какой более правильный)
AnyHashable
, но тогда придётся кастить:private typealias DataSource = UICollectionViewDiffableDataSource<Section, AnyHashable>
...
let cellProvider: DataSource.CellProvider = { collectionView, indexPath, itemIdentifier in
if let city = itemIdentifier as? CityModel {
// configure cell
return cell
}
if let coutry = itemIdentifier as? CountryModel {
// configure cell
return cell
}
return nil
}
private enum Item: Hashable {
case country(CountryModel)
case city(CityModel)
}
...
private typealias DataSource = UICollectionViewDiffableDataSource<Section, Item>
...
snapshot.appendSections([.countries, .cities])
snapshot.appendItems(filteredCountries.map { .country($0) }, toSection: .countries)
snapshot.appendItems(filteredCitites.map { .city($0) }, toSection: .cities)
...
let cellProvider: DataSource.CellProvider = { collectionView, indexPath, itemIdentifier in
switch itemIdentifier {
case let .country(country):
// configure cell
return cell
case let .city(city):
// configure cell
return cell
}
return nil
}
Вариант с enum
звучит идеально!
Предлагаю добавить в код примеры разных типов ячеек / секций. Т.к. из текущего примера пока что понятно только как в целом завести diffableDataSource и заполнить табличку / коллекцию однотипными ячейками, но в реальности чаще сталкиваешься с тем что таблица / коллекция заполняется разношерстными данными.