问题
I am using RxSwift for tableview. I need to reload my table each time after getting data from api but I'm failed to do this. I couldn't find any solution for that. Can anybody help?
I have an array of places obtain from response of an Api.I have used this code in view did load, but its is not being called when array is updated.
回答1:
I have found the issue. My array was not being getting updated correctly. I did the following changes.
Declare dataSource
variable of ModelClass:
let dataSource = Variable<[SearchResult]>([])
Bind it with the table view right now it is empty:
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)
Then store my updated array in it that contains the searchPlaces:
dataSource.value = self.array
Now each time when value of dataSource will be changed, table view will be reloaded.
回答2:
Avoid using "Variable" because of this concept will be deprecated from RxSwift but official migration path hasn't been decided yet.
REF: https://github.com/ReactiveX/RxSwift/issues/1501
Hence, recommend using RxCocoa.BehaviorRelay instead.
let dataSource = BehaviorRelay(value: [SearchResultModel]())
Bind to 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)
after fetch data:
let newSearchResultModels: [SearchResultModel] = ..... //your new data
dataSource.accept(newSearchResultModels)
Hope this can help :)
回答3:
Let
array = Variable<[SearchResult]>([])
Whenever you hit your API, put your fetched results in self.array.value
and it will automatically gets updated.
self.array.asObservable().bindTo(ResultsTable.rx.items(cellIdentifier: "SearchCell", cellType:SearchCell.self))
{ (row, element, cell) in
cell.configureCell(element: element)
}.addDisposableTo(disposeBag)
来源:https://stackoverflow.com/questions/42899259/reload-tableview-using-rxswift