List -> Detail 構成のRealmを使ったデータ同期サンプル
carthage bootstrap --platform iOS
open RealmSyncBetween2VCSample.xcodeproj
private class ViewModel {
fileprivate struct PresentationModel {
...
}
...
fileprivate var items: [PresentationModel]
init(_ viewController: ViewController) {
...
let entities = try! Realm().objects(ItemEntity.self)
self.items = entities.map { PresentationModel(...) }
Observable.changeset(from: entities) // RxRealmで変更通知をbindする
.subscribe(onNext: { [weak self] results, changes in
...
if let changes = changes {
...
self?.items = results.map { PresentationModel(...) }
}
})
.disposed(by: disposeBag)
}
}
- ViewModelで
Realm.Object
を保持しない
- Viewへのデータ反映は更新を自動検知する
- 例外として、
UITableView
などで最適な更新をするためだけにメソッドを呼ぶ
Realm.Object
-> 表示用モデルの変換処理の分離(Transformerなど)
Realm.Object
へのアクセスの分離(Repositoryなど)