我正在将 RxSwift 用于表格视图。每次从 api 获取数据后,我都需要重新加载我的表,但我没有这样做。我找不到任何解决方案。有人可以帮忙吗?
我有一个从 Api 的响应中获取的位置数组。我在视图中使用了这个代码确实加载了,但是当数组更新时它没有被调用。
我发现了这个问题。我的阵列没有得到正确更新。我做了以下更改。
声明dataSource
ModelClass 的变量:
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 的值时,都会重新加载表视图。
避免使用“变量”,因为这个概念将被 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)
希望这可以帮助:)
让
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)