RxMoya中的重复请求
问题描述:
我在RxSwift中使用最新版本的Moya,而且我遇到了一个逻辑问题,目前我找不到解决方案。RxMoya中的重复请求
比方说,我有一个实现了以下接口视图模型一个UITableViewController:
protocol ListViewModelType {
var items: Observable<[Item]> { get }
}
的items
属性被实现为(使用EVReflection):
var items: Observable<[Therapy]> {
get {
let provider = RxMoyaProvider<ItemService>()
return provider
.request(.all)
.map(toArray: Item.self)
}
}
在viewDidLoad方法在UITableViewController中,我已经通过以下代码建立了项目属性和tableView之间的绑定:
self.viewModel.items
.bind(to: tableView.rx.items(cellIdentifier: cellIdentifier, cellType: cellType)) { row, element, cell in
// cell configuration code
}
.disposed(by: self.disposeBag)
现在,我想刷新UITableView的内容以反映用户通过应用程序的其他部分完成的更改。考虑到RxMoyaProvider返回一个Observable,这应该很容易通过Observable发出的另一个值完成,但我不知道如何与提供者通信,它应该刷新服务器的内容并将其放入相同的Observable中。
我失去了一些东西在这里?有没有更好的方法将UITableView绑定到来自RxMoyaProvider的对象列表?
答
您必须重新加载我们的Moya请求。这有点冒险,但我想你会得到提示。
let didAppear = Variable(true)
override func viewDidAppear(_ animated: Bool) {
didAppear.value = true
}
override func viewDidLoad(){
self.didAppear.flatMap{ _ in self.viewModel.items}
.bind(to: tableView.rx.items(cellIdentifier: cellIdentifier, cellType: cellType)) { row, element, cell in
// cell configuration code
}
.disposed(by: self.disposeBag)
}
或者你可以重新设计我们的架构与下线为先的原则
好吧,我看到你的下线为先的原则点,但目前是要求和我之外更喜欢坚持在线。你提出的方法看起来很像一个黑客...你确定没有办法使用其他的东西来实现这个,比如MoyaProvider的包装器,也许吧? – MrAsterisco
我真的不明白这一点。没有首先脱机 –
好的,重点是支持服务器的答案可能随时间而改变的情况。可观察物被描述为数据流和恕我直言,这正是我在这里所得到的:一个数据流,每当我要求它刷新时就会发出一个新值。 – MrAsterisco