SWIFT/기본이야기

Diffable Data Source에 대해

KataRN 2022. 11. 17. 15:03
반응형

안녕하세요. KataRN입니다.

 

오늘은 Diffable Data Source에 대해 알아보겠습니다.

(최근 공모전에 참가했을때는 시간이 부족해서 나중에 해야지 하고 미뤄뒀던 내용입니다.)

 

Diffable Data Source란?

- TableView(CollectionView)를 그리기 위한 데이터를 관리하고 UI를 업데이트하며 Data Source와 달리 데이터가 달라진 부분을 추적하여 자연스럽게 UI를 업데이트한다.

 

🤔  한마디로 달라진것만 업데이트 + 자연스러운 UI( 애니메이션??)입니다.

 

우선 준비된 샘플앱 : https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/implementing_modern_collection_views

 

Apple Developer Documentation

 

developer.apple.com

 

이런거임..

 

diffable data source에 대해 알기전에는 검색마다 리로드하는 느낌이었단 말이죠...

이제 알게되었으니 샘플앱을 통해 알아보죠!

 

1. UICollectionViewDiffableDataSource 설정하기

 

사진을 보시면 우선 datasource를 설정해줍니다.

그리고 제네릭으로 Section, MoundatinsConroller.Mountain을 설정해줬습니다.

저는 여기서 좀 헤맸습니다. 구체적인 설명을 드리자면

Section은 말그대로 섹션이고 MountainsController.Mountain은 산의 이름이 포함된 셀에 뿌릴 데이터들입니다.

(참고로 Section은 1개여서 그냥 case에 main 한개 뿐인것같습니다.)

 

그런데 셀을 재사용하다보니 1번셀에 한라산, 2번셀에 북한산... 이런식으로 잘 들어가려면 셀의 데이터가 Hashable해야합니다.

고유성?이 있어야되죠 그래서 예제에서는 Mountain에 UUID를 설정해줬습니다.

이게 없으면 에러납니다.(빌드가 안되거나 마지막 섹션에 셀이 다들어가거나 모든 섹션에 셀이 1개가 되거나 등등의 문제가 여기서 생기는 문제일 수 있습니다.)

 

사진 보시죠.

 

그리고 초기 데이터를 만들어줍니다. 첫 사진을면 preformQuery(with: nil)이기 때문에 빈 화면이 뜹니다.

그리고 검색시마다 데이터를 넣어주는것입니다.

 

그러면 빈 DataSource와 검색어로 검색된 DataSource를 비교하게되고 UI업데이트가 됩니다.

 

여기서 필요한것은 snapShot입니다.

 

데이터를 넣어주는것이죠.

appendSections를 통해 main섹션을 넣어주고

appendItems를 통해 산의 정보들을 넣어줍니다.

검색어에 따라 바뀐 아이템을 넣어주는것이고요.

그리고 reloadSection이 있긴한데... reload를 하는 개념보다는 apply를 다시해서 비교하게끔 만드는게 핵심인것 같습니다.

 

직접할때는 엄청 헤맸는데 쓰니까 또 짧네..

 

도움이 필요하시면 댓글달아주세요.

아는것만 알아요... 모르는건 몰라요...

 

오늘도 읽어주셔서 감사합니다.

감사합니다.

반응형