RxSwiftとRXの概念全体が新しく、RxSwiftによってリモートサーバーからフェッチされたグローバルアプリケーション状態を処理する方法を知りたいと思います。RxSwiftでアプリケーションの状態を処理する方法
JSONをフェッチしてオブジェクトのリストに解析してテーブルビューに表示する必要があるとしますが、アプリケーションの他のセクションでデータを使用するには[{id: object}, ...]
という形式のマップを作成する必要があります。
例:Appはサーバーから人物リストを繰り返し取得し、personテーブルのデータを必要とします。人物メッセージはアバターと関連メッセージのステータスを表示します。したがって、モデルPersonとMessageで構成されたビューモデルPersonViewModel
とMessageViewModel
にはデータが必要です。
は、このような構造を持つための正しい方法のようになります。
struct Person {
let id: personId
let fullName: String
let status: personStatus
}
class PeopleStore {
var order: [personId] = []
var dataMap: [personId: Person] = [:]
init(people: [Person]) {
order = people.map { $0.id }
for person in people {
dataMap[person.id] = person
}
}
}
class AppState {
let rx_peopleStore: Variable<PeopleStore>
init(peopleStore: PeopleStore) {
self.rx_peopleStore = Variable(peopleStore)
}
}
し、サーバからのフェッチによってアプリの状態を調整する:
...
_ = PeopleApi
.rx_peopleStore
.asDriver(onErrorJustReturn: [])
.driveNext { peopleStore in
sharedAppState.rx_peopleStore.value = peopleStore
}
...
とのviewmodels中:
...
_ = sharedAppState
.rx_peopleStore
.asDriver()
.driveNext { store in
// refreshUI by data from store
}
.addDisposableTo(bag)
...
これは正しい方法ですか、いくつかの異なる優れたアプローチがありますか?私はまた、(将来)フェッチされたデータを永続させたいと思います。ベストプラクティスは何ですか?ありがとうございました。
P.S.コードに入力ミスがありましたら、ご迷惑をおかけします。コンパイルせずに書きました。
マリントモロフは、この上に良い記事がありますhttp://rx-marin.com/post/rxswift-realm-reactive-app-settings/ –