iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Swift】UICompositionalLayout + Diffable Data Source 時の再描画処理

再描画時にcollectionViewLayoutを入れ替えて、dataSource.apply(snapshot, animatingDifferences: false)なんてことをしていたが、なんかデータのリフレッシュタイミングでIndex out of rangeになると思ったら更新の仕方が大きく勘違いしていたので軽くメモ✍️ (細かい内容は別途記事にしようとおもいます🏃‍♂️)

結論

UICompositionalLayout + Diffable Data Sourceの場合は、基本的にsnapshotを更新すればよかった。つまり、collectionViewLayoutは下記のように元データを参照させるようにして

        collectionView.collectionViewLayout = UICollectionViewCompositionalLayout {[unowned self] section, _ in
            switch viewModel.sections.value[section] {
            case .largeItem(let item, let section):
                return layoutGenerator.largeLayoutSection(item: item, isFirstItem: section == 0)
            case .smallItems(let items, _):
                return layoutGenerator.itemsLayoutSection(items: items)
            }
        }

再描画時には、dataSource.apply(snapshot, animatingDifferences: false)を実行すればいいということです🛠

let snapshot = dataSource.snapshot()
// TODO: snapshot更新処理
dataSource.apply(snapshot, animatingDifferences: false)

てな感じで本日も以上となります🍺

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog