7

我正在将 RxSwift 用于表格视图。每次从 api 获取数据后,我都需要重新加载我的表,但我没有这样做。我找不到任何解决方案。有人可以帮忙吗?

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

在此处输入图像描述

4

3 回答 3

13

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

声明dataSourceModelClass 的变量:

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

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

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

现在每次更改 dataSource 的值时,都会重新加载表视图。

于 2017-03-20T11:52:23.707 回答
8

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

参考: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)

希望这可以帮助:)

于 2018-09-01T04:48:18.477 回答
3

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)
于 2017-08-02T03:44:15.443 回答