---
title: UICollectionViewDiffableDataSourceReference
framework: uikit
role: symbol
role_heading: Class
path: uikit/uicollectionviewdiffabledatasourcereference
---

# UICollectionViewDiffableDataSourceReference

The object you use to manage data and provide cells for a collection view.

## Declaration

```swift
@MainActor class UICollectionViewDiffableDataSourceReference
```

## Overview

Overview important: If you’re working in a Swift codebase, always use UICollectionViewDiffableDataSource instead. A diffable data source object is a specialized type of data source that works together with your collection view object. It provides the behavior you need to manage updates to your collection view’s data and UI in a simple, efficient way. It also conforms to the UICollectionViewDataSource protocol and provides implementations for all of the protocol’s methods. To fill a collection view with data: Connect a diffable data source to your collection view. Implement a cell provider to configure your collection view’s cells. Generate the current state of the data. Display the data in the UI. To connect a diffable data source to a collection view, you create the diffable data source using its init(collectionView:cellProvider:) initializer, passing in the collection view you want to associate with that data source. You also pass in a cell provider, where you configure each of your cells to determine how to display your data in the UI. self.dataSource = [[UICollectionViewDiffableDataSource alloc] initWithCollectionView:self.collectionView cellProvider:^UICollectionViewCell *(UICollectionView *collectionView, NSIndexPath *indexPath, id item) {     // Configure and return cell. }]; Then, you generate the current state of the data and display the data in the UI by constructing and applying a snapshot. For more information, see NSDiffableDataSourceSnapshotReference. important: Don’t change the dataSource on the collection view after you configure it with a diffable data source. If the collection view needs a new data source after you configure it initially, create and configure a new collection view and diffable data source.

## Topics

### Creating a diffable data source

- [init(collectionView:cellProvider:)](uikit/uicollectionviewdiffabledatasourcereference/init(collectionview:cellprovider:).md)
- [UICollectionViewDiffableDataSourceReferenceCellProvider](uikit/uicollectionviewdiffabledatasourcereferencecellprovider.md)

### Creating supplementary views

- [supplementaryViewProvider](uikit/uicollectionviewdiffabledatasourcereference/supplementaryviewprovider.md)
- [UICollectionViewDiffableDataSourceReferenceSupplementaryViewProvider](uikit/uicollectionviewdiffabledatasourcereferencesupplementaryviewprovider.md)

### Identifying items

- [itemIdentifier(for:)](uikit/uicollectionviewdiffabledatasourcereference/itemidentifier(for:).md)
- [indexPath(forItemIdentifier:)](uikit/uicollectionviewdiffabledatasourcereference/indexpath(foritemidentifier:).md)

### Identifying sections

- [sectionIdentifier(for:)](uikit/uicollectionviewdiffabledatasourcereference/sectionidentifier(for:).md)
- [index(forSectionIdentifier:)](uikit/uicollectionviewdiffabledatasourcereference/index(forsectionidentifier:).md)

### Updating data

- [snapshot()](uikit/uicollectionviewdiffabledatasourcereference/snapshot().md)
- [applySnapshot(_:animatingDifferences:)](uikit/uicollectionviewdiffabledatasourcereference/applysnapshot(_:animatingdifferences:).md)
- [applySnapshot(_:animatingDifferences:completion:)](uikit/uicollectionviewdiffabledatasourcereference/applysnapshot(_:animatingdifferences:completion:).md)
- [applySnapshot(usingReloadData:)](uikit/uicollectionviewdiffabledatasourcereference/applysnapshot(usingreloaddata:).md)
- [applySnapshot(usingReloadData:completion:)](uikit/uicollectionviewdiffabledatasourcereference/applysnapshot(usingreloaddata:completion:).md)

### Updating section data

- [snapshot(forSection:)](uikit/uicollectionviewdiffabledatasourcereference/snapshot(forsection:).md)
- [applySnapshot(_:toSection:animatingDifferences:completion:)](uikit/uicollectionviewdiffabledatasourcereference/applysnapshot(_:tosection:animatingdifferences:completion:).md)
- [applySnapshot(_:toSection:animatingDifferences:)](uikit/uicollectionviewdiffabledatasourcereference/applysnapshot(_:tosection:animatingdifferences:).md)

### Supporting reordering

- [reorderingHandlers](uikit/uicollectionviewdiffabledatasourcereference/reorderinghandlers.md)

### Supporting expanding and collapsing

- [sectionSnapshotHandlers](uikit/uicollectionviewdiffabledatasourcereference/sectionsnapshothandlers.md)

## Relationships

### Inherits From

- [NSObject](objectivec/nsobject-swift.class.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [Sendable](swift/sendable.md)
- [UICollectionViewDataSource](uikit/uicollectionviewdatasource.md)
