使用 RxSwift 重新加载 Tableview

Reload Tableview using RxSwift

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

我有一个从 Api.I 的响应中获取的位置数组,在视图中使用了此代码确实加载了,但在更新数组时未调用它。

我找到问题了。我的阵列没有得到正确更新。我做了以下更改。

声明dataSource 模型类变量:

let dataSource = Variable<[SearchResult]>([])

将其与 table 视图绑定,现在它是空的:

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)

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

dataSource.value = self.array

现在每次更改数据源的值时,table 视图都会重新加载。

array = Variable<[SearchResult]>([])

每当您点击 API 时,将获取的结果放入 self.array.value,它会自动更新。

 self.array.asObservable().bindTo(ResultsTable.rx.items(cellIdentifier: "SearchCell", cellType:SearchCell.self)) 
   { (row, element, cell) in
        cell.configureCell(element: element)
   }.addDisposableTo(disposeBag)

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

REF:https://github.com/ReactiveX/RxSwift/issues/1501

因此,建议改用 RxCocoa.BehaviorRelay。

let dataSource = BehaviorRelay(value: [SearchResultModel]())

绑定到 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)

获取数据后:

let newSearchResultModels: [SearchResultModel] = ..... //your new data
dataSource.accept(newSearchResultModels)

希望对您有所帮助:)