2016-04-18 10 views
2

RxSwiftとRXの概念全体が新しく、RxSwiftによってリモートサーバーからフェッチされたグローバルアプリケーション状態を処理する方法を知りたいと思います。RxSwiftでアプリケーションの状態を処理する方法

JSONをフェッチしてオブジェクトのリストに解析してテーブルビューに表示する必要があるとしますが、アプリケーションの他のセクションでデータを使用するには[{id: object}, ...]という形式のマップを作成する必要があります。

例:Appはサーバーから人物リストを繰り返し取得し、personテーブルのデータを必要とします。人物メッセージはアバターと関連メッセージのステータスを表示します。したがって、モデルPersonとMessageで構成されたビューモデルPersonViewModelMessageViewModelにはデータが必要です。

は、このような構造を持つための正しい方法のようになります。

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.コードに入力ミスがありましたら、ご迷惑をおかけします。コンパイルせずに書きました。

+0

マリントモロフは、この上に良い記事がありますhttp://rx-marin.com/post/rxswift-realm-reactive-app-settings/ –

答えて

0

私は、サーバー応答、ジオロケーションなどのような別のものの最近の状態を維持するのと同様の問題を抱えていました。このため、これまで使用していた軽量Rxベースのフレームワークを作成しました。あなたのニーズも同様に - https://github.com/maxvol/RaspSwift

関連する問題