UITableViewDiffableDataSource

Groot·2022년 10월 10일
0

TIL

목록 보기
69/153
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 UITableViewDiffableDataSource - 공식문서

  • 데이터를 관리하고 테이블 보기에 대한 셀을 제공하는 데 사용하는 개체입니다.

📍 Declaration

@preconcurrency @MainActor class @preconcurrency @MainActor class UITableViewDiffableDataSource<SectionIdentifierType, ItemIdentifierType> : NSObject where SectionIdentifierType : Hashable, SectionIdentifierType : Sendable, ItemIdentifierType : Hashable, ItemIdentifierType : Sendable

📍 Overview

  • diffable 데이터 원본 개체는 테이블 보기 개체와 함께 작동하는 특수한 유형의 데이터 원본입니다.
  • 간단하고 효율적인 방식으로 테이블 뷰의 데이터 및 UI 업데이트를 관리하는 데 필요한 동작을 제공합니다.
  • 또한 UITableViewDataSource 프로토콜을 준수하고 프로토콜의 모든 메서드에 대한 구현을 제공합니다.

  • 테이블 보기를 데이터로 채우기
    1. diffable data source를 table view에 연결하십시오.
    2. table view의 셀을 구성하려면 셀 공급자를 구현하십시오.
    3. data의 현재 상태를 생성합니다.
    4. UI에 data를 표시합니다.

  • diffable data source를 table view에 연결하려면 init(tableView:cellProvider:) initializer를 사용하여 diffable data source를 생성하고 해당 data source와 연결하려는 table view를 전달합니다.
    dataSource = UITableViewDiffableDataSource<Int, UUID>(tableView: tableView) {
        (tableView: UITableView, indexPath: IndexPath, itemIdentifier: UUID) -> UITableViewCell? in
        // configure and return cell
    }
  • 그런 다음 스냅샷을 구성하고 적용하여 데이터의 현재 상태를 생성하고 UI에 데이터를 표시합니다.

    diffable data source로 구성한 후에는 table view에서 dataSource를 변경하지 마십시오. table view를 처음 구성한 후 새 데이터 원본이 필요한 경우 새 table view 및 diffable 데이터 원본을 만들고 구성합니다.


📌 NSDiffableDataSourceSnapshot - 공식문서

  • 특정 시점에서 View의 Data 상태를 나타냅니다.

📍 Declaration

@preconcurrency struct NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType> where SectionIdentifierType : Hashable, SectionIdentifierType : Sendable, ItemIdentifierType : Hashable, ItemIdentifierType : Sendable

📍 Overview

  • Diffable data sources는 Snapshot을 사용하여 컬렉션 보기 및 table view에 대한 데이터를 제공합니다. Snapshot을 사용하여 table view에 표시되는 데이터의 초기 상태를 설정하고 Snapshot을 사용하여 table view에 표시되는 데이터의 변경 사항을 반영합니다.
  • 스냅샷의 데이터는 사용자가 결정한 순서대로 표시할 섹션과 항목으로 구성됩니다. 섹션 및 항목을 추가, 삭제 또는 이동하여 표시할 항목을 구성합니다.

    각 섹션과 항목에는 Hashable 프로토콜을 준수하는 고유 식별자가 있어야 합니다. Int, String 또는 UUID와 같은 내장 유형을 포함하여 식별자에 struct 또는 enum Swift 값 유형을 사용하십시오.
    식별자에 Swift 클래스를 사용하는 경우 클래스는 NSObject의 하위 클래스여야 합니다.

  • 스냅샷을 사용하여 보기에 데이터를 표시하려면
    1. 스냅샷을 만들고 표시하려는 데이터의 상태로 채웁니다.
    2. UI의 변경 사항을 반영하도록 스냅샷을 적용합니다.
  • 다음 방법 중 하나로 스냅샷을 만들고 구성할 수 있습니다.
    1. 빈 스냅샷을 만든 다음 섹션과 항목을 추가합니다.
    2. diffable 데이터 소스의 snapshot() 메서드를 호출하여 현재 스냅샷을 가져온 다음 표시하려는 데이터의 새 상태를 반영하도록 해당 스냅샷을 수정합니다.

  • 예를 들어, 다음 코드는 빈 스냅샷을 만들고 3개의 항목이 있는 단일 섹션으로 채웁니다.
  • 그런 다음 코드는 스냅샷을 적용하여 이전 상태와 새 상태 간의 UI 업데이트에 애니메이션을 적용합니다.

// Create a snapshot.
var snapshot = NSDiffableDataSourceSnapshot<Int, UUID>()        

// Populate the snapshot.
snapshot.appendSections([0])
snapshot.appendItems([UUID(), UUID(), UUID()])

// Apply the snapshot.
dataSource.apply(snapshot, animatingDifferences: true)

📍 Bridging

  • NSDiffableDataSourceSnapshotReference 개체에서 다음 유형으로 연결할 수 있습니다.
let snapshot = snapshotReference as NSDiffableDataSourceSnapshot<Int, UUID>
profile
I Am Groot

0개의 댓글