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