CollectionViewAdapter

open class CollectionViewAdapter<O> : BaseAdapter<O, DefaultCollectionViewTarget<UICollectionView>>, UICollectionViewDataSource where O : DynamicObject

The DiffableDataSource.CollectionViewAdapter serves as a UICollectionViewDataSource that handles ListPublisher snapshots for a UICollectionView. Subclasses of DiffableDataSource.CollectionViewAdapter may override some UICollectionViewDataSource methods as needed. The DiffableDataSource.CollectionViewAdapter instance needs to be held on (retained) for as long as the UICollectionView‘s lifecycle.

self.dataSource = DiffableDataSource.CollectionViewAdapter<Person>(
    collectionView: self.collectionView,
    dataStack: CoreStoreDefaults.dataStack,
    cellProvider: { (collectionView, indexPath, person) in
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PersonCell") as! PersonCell
        cell.setPerson(person)
        return cell
    }
)

The dataSource can then apply changes from a ListPublisher as shown:

listPublisher.addObserver(self) { [weak self] (listPublisher) in
   self?.dataSource?.apply(
       listPublisher.snapshot,
       animatingDifferences: true
   )
}

DiffableDataSource.CollectionViewAdapter fully handles the reload animations.

See also

CoreStore’s DiffableDataSource implementation is based on https://github.com/ra1028/DiffableDataSources

Public

  • Initializes the DiffableDataSource.CollectionViewAdapter. This instance needs to be held on (retained) for as long as the UICollectionView‘s lifecycle.

    self.dataSource = DiffableDataSource.CollectionViewAdapter<Person>(
        collectionView: self.collectionView,
        dataStack: CoreStoreDefaults.dataStack,
        cellProvider: { (collectionView, indexPath, person) in
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PersonCell") as! PersonCell
            cell.setPerson(person)
            return cell
        }
    )
    

    Declaration

    Swift

    public init(
        collectionView: UICollectionView,
        dataStack: DataStack,
        cellProvider: @escaping (UICollectionView, IndexPath, O) -> UICollectionViewCell?,
        supplementaryViewProvider: @escaping (UICollectionView, String, IndexPath) -> UICollectionReusableView? = { _, _, _ in nil }
    )

    Parameters

    collectionView

    the UICollectionView to set the dataSource of. This instance is not retained by the DiffableDataSource.CollectionViewAdapter.

    dataStack

    the DataStack instance that the dataSource will fetch objects from

    cellProvider

    a closure that configures and returns the UICollectionViewCell for the object

    supplementaryViewProvider

    an optional closure for providing UICollectionReusableView supplementary views. If not set, defaults to returning nil