使用RxSwift重新加载Tableview

Meh*_*een 3 ios swift rx-swift rx-cocoa

我正在使用RxSwift进行tableview.每次从api获取数据后我都需要重新加载我的表但是我没有这样做.我找不到任何解决方案.有人可以帮忙吗?

我有一个从Api的响应获得的地方数组.我在视图中使用了这个代码加载,但是在更新数组时它没有被调用.

在此输入图像描述

Meh*_*een 10

我发现了这个问题.我的阵列没有正确更新.我做了以下更改.

声明dataSourceModelClass的变量:

let dataSource = Variable<[SearchResult]>([])
Run Code Online (Sandbox Code Playgroud)

现在将它与表视图绑定为空:

dataSource.asObservable().bindTo(ResultsTable.rx.items(cellIdentifier: "SearchCell")){ row,Searchplace,cell in
    if let C_cell = cell as? SearchTableViewCell{
        C_cell.LocationLabel.text = Searchplace.place
    }
}.addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)

然后将包含searchPlaces的更新数组存储在其中:

dataSource.value = self.array
Run Code Online (Sandbox Code Playgroud)

现在,每次更改dataSource的值时,将重新加载表视图.


小智 7

避免使用“变量”,因为这个概念将从 RxSwift 中被弃用,但官方迁移路径尚未确定。

参考:https : //github.com/ReactiveX/RxSwift/issues/1501

因此,推荐使用 RxCocoa.BehaviorRelay 代替。

let dataSource = BehaviorRelay(value: [SearchResultModel]())
Run Code Online (Sandbox Code Playgroud)

绑定到 tableView

 self.dataSource.bind(to: self.tableView.rx.items(cellIdentifier: "SearchCell", cellType: SearchCell.self)) { index, model, cell in
      cell.setupCell(model: model)
 }.disposed(by: self.disposeBag)
Run Code Online (Sandbox Code Playgroud)

获取数据后:

let newSearchResultModels: [SearchResultModel] = ..... //your new data
dataSource.accept(newSearchResultModels)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助:)