【Swift】RxSwiftを使ったTableViewの実装(Delegate/reloadDataは使わない!)


Delegateで実装したくない!

TableViewを実装しようとすると、Delegateで結構ソースの幅を取るのが嫌いです。
しかもTableViewの元データに変更が会った時、わざわざ.reloadData()をしなければならない。。

そんなことしなくても、元データを監視して自動でTableViewをリロードして欲しい!

そんな方法を RxSwift を用いて紹介しちゃう会。

 実装

// 元データ
var list: Variable<[String]> = Variable([])

// viewDidLoadとかで読み込み
private func observeList() {
  list.asDriver()
    .drive(rx.items(cellIdentifier: "cell", cellType: CustomCell.self)) { (row, element, cell) in
      // cellの描画処理
      cell.setup(element)
    }.disposed(by: disposeBag)
}

これでlistの値が更新されると、TableViewがリロードしてくれます。
ソースも減って、元データの監視もできて、この書き方覚えたら元には戻れない。

RxSwiftに関する記事

【Swift】RxSwiftでボタンのタップイベントを拾う