Ios RxSwift+;莫亚+;Moya#u ObjectMapper+;刷新,刷新失败?
我是RxSwift的新手我想刷新tableview以显示新数据。我可以获取数据的第一个请求。但是当我打开tableview时,请求没有完成。我对此一无所知?我的代码如下: 1:我的viewController代码:Ios RxSwift+;莫亚+;Moya#u ObjectMapper+;刷新,刷新失败?,ios,swift,uitableview,rx-swift,moya,Ios,Swift,Uitableview,Rx Swift,Moya,我是RxSwift的新手我想刷新tableview以显示新数据。我可以获取数据的第一个请求。但是当我打开tableview时,请求没有完成。我对此一无所知?我的代码如下: 1:我的viewController代码: class RecommendViewController: UIViewController { lazy var tableView = DefaultManager.createTableView(HomeImageCell.self,
class RecommendViewController: UIViewController {
lazy var tableView = DefaultManager.createTableView(HomeImageCell.self,
HomeImageCell.idenfitier)
let disposeBag = DisposeBag()
lazy var viewModel = HomeViewModel()
lazy var dataSource: [HomeListDetailModel] = []
override func viewDidLoad() {
super.viewDidLoad()
viewModel.fetchRecommendList("answer_feed",0)
setupTableView()
configureRefresh()
bindDataToTableView()
}
func setupTableView() {
view.addSubview(tableView)
tableView.snp.makeConstraints { (make) in
make.edges.equalTo(0)
}
tableView.estimatedHeight(200)
}
func bindDataToTableView() {
viewModel.recommend
.observeOn(MainScheduler.instance)
.do(onNext: { [unowned self] model in
print("endAllRefresh")
self.endAllRefresh()
}, onError: { (error) in
self.endAllRefresh()
print("error = \(error)")
})
.map { [unowned self] model in
return self.handleData(model)
}.bind(to: tableView.rx.items(cellIdentifier: HomeImageCell.idenfitier , cellType: HomeImageCell.self )) { index, model, cell in
cell.updateCell(data: model)
}.disposed(by: disposeBag)
}
func configureRefresh() {
tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: { [unowned self] in
let model = self.dataSource[0]
self.viewModel.fetchRecommendList("answer_feed",model.behot_time)
})
tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingBlock: { [unowned self] in
let model = self.dataSource[self.dataSource.count - 1]
self.viewModel.fetchRecommendList("answer_feed",model.behot_time)
})
}
func endAllRefresh() {
self.tableView.mj_header.endRefreshing()
self.tableView.mj_footer.endRefreshing()
}
func handleData(_ model: HomeListModel) -> [HomeListDetailModel] {
guard let data = model.detailData else {
return dataSource
}
self.dataSource = data
return data
}
}
2:我的ViewModel
protocol HomeProtocol {
func fetchRecommendList(_ category: String, _ behot_time: Int)
}
class HomeViewModel: HomeProtocol {
lazy var provider = HTTPServiceProvider.shared
var recommend: Observable<HomeListModel>!
init() {}
init(_ provider: RxMoyaProvider<MultiTarget>) {
self.provider = provider
}
func fetchRecommendList(_ category: String, _ behot_time: Int) {
recommend = provider.request(MultiTarget(HomeAPI.homeList(category: category,behot_time: behot_time)))
.debug()
.mapObject(HomeListModel.self)
}
}
协议家庭协议{
func fetchRecommendList(uu类别:字符串,uuBehot_u时间:Int)
}
类HomeViewModel:HomeProtocol{
lazy var provider=HTTPServiceProvider.shared
var推荐:可观察!
init(){}
init(u提供程序:RxMoyaProvider){
self.provider=提供程序
}
func fetchRecommendList(uu类别:字符串,uuBehot_u时间:Int){
推荐=provider.request(多目标(HomeAPI.homeList(类别:category,behot\u time:behot\u time)))
.debug()
.mapObject(HomeListModel.self)
}
}
当我在请求时创建断点方法时,它没有执行请求吗?有人知道吗?首先谢谢有人告诉我原因,所以我写在这里。在我的视图中,model
推荐
应该由发布主题
或行为主题
或重播主题
支持,然后我应该将其作为可观察的
分享给视图
。在fetchRecommentList
方法中,我应该将请求绑定到创建的主题
。
现在我已经创建了observable,但请求将在subscribe
或bind
之后运行