使用RxSwift重新加载Tableview

时间:2017-03-20 08:54:45

标签: ios swift rx-swift rx-cocoa

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

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

enter image description here

3 个答案:

答案 0 :(得分:8)

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

声明ModelClass的dataSource变量:

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的值时,都会重新加载表视图。

答案 1 :(得分:3)

避免使用“ 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)

希望这会有所帮助:)

答案 2 :(得分:2)

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)