Swift DiffableDataSourceを使ってreloadItemsを行った時の動作が謎だった

Swift Swift
Swift

DiffableDataSource、SnapShotでUICollectionViewを実装・管理している場合に、Cellを更新したくてreloadItemsを実行したが、更新はされたが、動きが理解出来なかったのでメモ_φ(・_・

DiffableDataSourceを使用している場合、reloadItemsを使ってCellを更新しろ!ってXcodeに言われるのでSnapShotのreloadItemsを実行します。
更新自体はうまくいきます。
正しく更新されているように見えます。

Cellが新しく読み込まれたときには、UICollectionViewDiffableDataSourceのCellProviderが実行されますが、リロードを行った時には実行されません。

Xcodeでブレークポイントを設定してもCellProviderは実行されませんが、何故かCellに記述している変数は新しい値が付けられたような動作になります。

なぜ(?_?)

色々ネットで調べたが、自分が知りたい内容が見つかりませんでしたが、下記のサイトを読んで試してみました。


https://swiftsenpai.com/development/modern-ways-reload-cells/

上記サイトにある、Structではなく、ClassでItemIdentifierTypeの作成を行いました。
そうすると、なんと!
以前までCellProviderが実行されてないのに、変数が変わってる・・・
という動作が、CellProviderが実行されて、変数も変わる!

という動きになりました。
これはXcodeのブレークポイントが効いてないだけで、実際はCellProviderが実行されているのか?
そういうモノなのか・・・

謎です。
ItemIdentifierTypeのデータをClassで作成するとなると、上記サイトのように、hashメソッドの実装と「==」メソッドの実装まで書かなければいけません。
Structであれば、Hashableを継承するだけでいけました。

う〜ん・・・
謎ですが、多少情報が分かってきたので、メモ。
今後どっちで実装したほうが良いのかな〜(;・∀・)

コメント

タイトルとURLをコピーしました