---
title: UICollectionViewDiffableDataSource
framework: uikit
role: symbol
role_heading: Class
path: uikit/uicollectionviewdiffabledatasource-9tqpa
---

# UICollectionViewDiffableDataSource

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

## Declaration

```swift
@MainActor @preconcurrency class UICollectionViewDiffableDataSource<SectionIdentifierType, ItemIdentifierType> where SectionIdentifierType : Hashable, SectionIdentifierType : Sendable, ItemIdentifierType : Hashable, ItemIdentifierType : Sendable
```

## Overview

Overview 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. dataSource = UICollectionViewDiffableDataSource<Int, UUID>(collectionView: collectionView) {     (collectionView: UICollectionView, indexPath: IndexPath, itemIdentifier: UUID) -> UICollectionViewCell? in     // 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 NSDiffableDataSourceSnapshot. 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/uicollectionviewdiffabledatasource-9tqpa/init(collectionview:cellprovider:).md)
- [UICollectionViewDiffableDataSource.CellProvider](uikit/uicollectionviewdiffabledatasource-9tqpa/cellprovider.md)

### Creating supplementary views

- [supplementaryViewProvider](uikit/uicollectionviewdiffabledatasource-9tqpa/supplementaryviewprovider-swift.property.md)
- [UICollectionViewDiffableDataSource.SupplementaryViewProvider](uikit/uicollectionviewdiffabledatasource-9tqpa/supplementaryviewprovider-swift.typealias.md)

### Identifying items

- [itemIdentifier(for:)](uikit/uicollectionviewdiffabledatasource-9tqpa/itemidentifier(for:).md)
- [indexPath(for:)](uikit/uicollectionviewdiffabledatasource-9tqpa/indexpath(for:).md)

### Identifying sections

- [sectionIdentifier(for:)](uikit/uicollectionviewdiffabledatasource-9tqpa/sectionidentifier(for:).md)
- [index(for:)](uikit/uicollectionviewdiffabledatasource-9tqpa/index(for:).md)

### Updating data

- [snapshot()](uikit/uicollectionviewdiffabledatasource-9tqpa/snapshot().md)
- [apply(_:animatingDifferences:)](uikit/uicollectionviewdiffabledatasource-9tqpa/apply(_:animatingdifferences:).md)
- [apply(_:animatingDifferences:completion:)](uikit/uicollectionviewdiffabledatasource-9tqpa/apply(_:animatingdifferences:completion:).md)
- [applySnapshotUsingReloadData(_:)](uikit/uicollectionviewdiffabledatasource-9tqpa/applysnapshotusingreloaddata(_:).md)
- [applySnapshotUsingReloadData(_:completion:)](uikit/uicollectionviewdiffabledatasource-9tqpa/applysnapshotusingreloaddata(_:completion:).md)

### Updating section data

- [snapshot(for:)](uikit/uicollectionviewdiffabledatasource-9tqpa/snapshot(for:).md)
- [apply(_:to:animatingDifferences:completion:)](uikit/uicollectionviewdiffabledatasource-9tqpa/apply(_:to:animatingdifferences:completion:).md)
- [apply(_:to:animatingDifferences:)](uikit/uicollectionviewdiffabledatasource-9tqpa/apply(_:to:animatingdifferences:).md)

### Supporting reordering

- [reorderingHandlers](uikit/uicollectionviewdiffabledatasource-9tqpa/reorderinghandlers-swift.property.md)
- [UICollectionViewDiffableDataSource.ReorderingHandlers](uikit/uicollectionviewdiffabledatasource-9tqpa/reorderinghandlers-swift.struct.md)
- [NSDiffableDataSourceTransaction](uikit/nsdiffabledatasourcetransaction-swift.struct.md)
- [NSDiffableDataSourceSectionTransaction](uikit/nsdiffabledatasourcesectiontransaction-swift.struct.md)

### Supporting expanding and collapsing

- [sectionSnapshotHandlers](uikit/uicollectionviewdiffabledatasource-9tqpa/sectionsnapshothandlers-swift.property.md)
- [UICollectionViewDiffableDataSource.SectionSnapshotHandlers](uikit/uicollectionviewdiffabledatasource-9tqpa/sectionsnapshothandlers-swift.struct.md)

### Debugging a diffable data source

- [description()](uikit/uicollectionviewdiffabledatasource-9tqpa/description().md)

### Supporting bridging

- [UICollectionViewDiffableDataSourceReference](uikit/uicollectionviewdiffabledatasourcereference.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)
- [SendableMetatype](swift/sendablemetatype.md)
- [UICollectionViewDataSource](uikit/uicollectionviewdatasource.md)

## See Also

### Data

- [Updating collection views using diffable data sources](uikit/updating-collection-views-using-diffable-data-sources.md)
- [Implementing modern collection views](uikit/implementing-modern-collection-views.md)
- [Building high-performance lists and collection views](uikit/building-high-performance-lists-and-collection-views.md)
- [UICollectionViewDataSource](uikit/uicollectionviewdatasource.md)
- [UICollectionViewDataSourcePrefetching](uikit/uicollectionviewdatasourceprefetching.md)
- [NSDiffableDataSourceSnapshot](uikit/nsdiffabledatasourcesnapshot-swift.struct.md)
- [NSDiffableDataSourceSectionSnapshot](uikit/nsdiffabledatasourcesectionsnapshot-swift.struct.md)
- [UIRefreshControl](uikit/uirefreshcontrol.md)
