iOS - RxDataSource

RxDataSource의 주요 특징

  • 반응형 데이터 업데이트
    • 데이터가 변경되면 UITableView 또는 UICollectionView가 자동으로 업데이트 퇸다.
  • Diffing Algorithm 사용
    • 내부적으로 데이터 변경을 비교(Diffing)하여 변경된 셀만 업데이트한다
    • 성능 최적화
  • 다양한 데이터 섹션 모델 지원
    • 단일 섹션뿐만 아니라, 다중 섹션 모델을 쉽게 정의하고 처리할 수 있다.
  • 애니메이션 지원
    • 데이터 변경 시 삽입, 삭제, 이동 등에 애니메이션을 쉽게 적용할 수 있다.
  • Swift 타입 안전성
    • Swift의 제네릭 타입 시스템을 활용하여 안전한 데이터 관리.

데이터 모델 정의

RxDataSource는 기본적으로 SecionModel 구조체를 사용하여 섹션 기반의 데이터를 정의한다.

struct MySection {
    var header: String
    var items: [String]
}

extension MySection: SectionModelType {
    typealias Item = String

    init(original: MySection, items: [Item]) {
        self = origin
        self.items = items
    }
}

RxDataSource 객체 생성

RxTableViewSectionReloadDataSource를 사용해 데이터 소스를 정의한다.

let dataSource = RxTableViewSectionedReloadDataSource<MySection>(
    configureCell: { dataSource, tableView, indexPath, item in
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = item
        return cell
    }
)

데이터 바인딩

RxSwift의 Obsesrvable을 사용해 데이터와 UI를 바인딩한다.

let sections = Observable.just([
    MySection(header: "First Section", items: ["Item 1", "Item 2", "Item 3"]),
    MySection(header: "Second Section", items: ["Item 4", "Item 5"])
])

sections
    .bind(to: tableView.rx.items(dataSource: dataSource))
    .disposed(by: disposeBag)

© 2024. All rights reserved.

Powered by Hydejack v9.2.1