我是RxSwift的新手和RX的整个概念,我想知道如何处理RxSwift从远程服务器获取的全局应用程序状态。
假设我需要获取JSON并将其解析为对象列表以在表视图中显示它,但我还需要以[{id: object}, ...]
格式创建地图以使用其他应用程序部分中的数据
例如:应用程序重复从服务器提取人员列表,并且需要人员表视图的数据,以及人员消息显示头像和状态以及相关消息。因此,模型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。对不起代码中的拼写错误,如果有的话。我只是在没有编译的情况下编写它。
答案 0 :(得分:0)
我在处理不同事物的最近状态(例如服务器响应,地理定位等)时遇到了类似的问题,并最终为此创建了一个基于Rx的轻量级框架,我从那时起就开始使用它,看看它是否适合你的需要 - https://github.com/maxvol/RaspSwift