4

我是 RxSwift 和 RX 整个概念的新手,我想知道如何处理 RxSwift 从远程服务器获取的全局应用程序状态。

假设我需要获取 JSON 并将其解析为对象列表以在表格视图中显示它,但我还需要创建格式的地图以[{id: object}, ...]在应用程序的其他部分中使用数据。

例如:应用程序重复从服务器获取人员列表,并需要人员表视图的数据作为人员消息来显示头像和状态以及相关消息。因此视图模型需要数据,并由模型 PersonPersonViewModelMessageViewModelMessage 组成。

拥有这种结构的正确方法是:

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
    }
...

在视图模型中:

...
_ = sharedAppState
    .rx_peopleStore
    .asDriver()
    .driveNext { store in
        // refreshUI by data from store
    }
    .addDisposableTo(bag)
...

这是正确的方法还是存在一些不同的更好的方法?我还想(将来)获取的数据保持不变。最佳做法是什么?谢谢你。

PS抱歉代码中的拼写错误,如果有的话。我只是写了它没有编译。

4

1 回答 1

0

我在保持不同事物的最新状态(如服务器响应、地理位置等)方面遇到了类似的问题,并最终为此制作了一个基于 Rx 的轻量级框架,我一直在使用它,看看它是否也适合您的需求- https://github.com/maxvol/RaspSwift

于 2017-08-22T10:37:02.980 回答