1

我正在使用最新版本的 Moya 和 RxSwift,我遇到了一个逻辑问题,目前我找不到解决方案。

假设我有一个带有 ViewModel 的 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)
        }
    }

在 UITableViewController 的 viewDidLoad 方法中,我通过以下代码在 items 属性和 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 的对象列表?

4

1 回答 1

1

您必须重新加载我们的 Moya 请求。这有点hacky,但我想你明白了。

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

或者,您可以使用离线优先原则重新设计我们的架构

在此处输入图像描述

于 2017-07-03T15:24:23.060 回答