- 현재 상태: Datasource Protocol을 통해 제공
- 하지만 앱은 점점 복잡해진다
- datasource는 VC에 붙어있는 경우가 많다.
- CoreData나 network 요청에 따라 datasource가 변하는 경우가 많다.
- 업데이트가 잘못되면 곧바로 크래시로 이어진다.
- 그리고 이러한 업데이트는 어려운 주제다
- reloadData를 하는 방법은 가장 확실하지만, 애니메이션을 포기해야 한다.
- 뭐가 문제인가?
- UI와 datasource는 항상 일치해야 한다
- 현재의 방식은 에러 유발하기 좋다
- 단일 소스가 없다.
- 새로운 방법: DiffableDatasource
- performBatchUpdate() 대신 apply()
- Snapshot방식 -> 단일 소스가 되어 준다.
- 관련 클래스
- UICollectionViewDiffableDatasource / NSCollectionViewDiffableDatasource
- UITableViewDiffalbleDatasource
- NSDiffableDatasourceSnapshot
- snapshot 사용법
- Snapshot 객체 만들기
- appendSections
- appendItems -> 이 때 섹션과 아이템은 모두 Hashable해야한다.
- apply
- datasource사용법 -> DiffableDatasource 객체를 만들면 된다.
- 클로저에는 cellForRowAt에 들어갈 내용을 넣어준다.
- 모든 API는 제네릭을 활용하도록 만들어졌다.
- 데모
- 고려할 것
- 예전 API와 섞어쓰지 말라
- snapshot을 만드는 방법은 2가지다.
- 빈 스냅샷
- 현재 데이터소스에서 snapshot을 뽑아내는 방법
- 다양한 편집 API가 제공된다.
- apply()는 백그라운드에서 호출해도 된다!