本文是基于 iOS - RxSwift 项目实战记录 所述,如果你还未阅读过,建议你最好还先阅读一遍,并下载Demo熟悉一下 : )
前言
MVVM的模式中,多出了ViewModel这个角色,将逻辑处理、网络请求等繁杂操作中ViewController中抽离出来,ViewController得以瘦身。
结合RxSwift架构,我们一般就会在ViewModel中定义一个input收集繁杂操作所需的信息,通过一个transform方法将input作为参数传入,进而得到一个output供controller使用。
在使用RxSwift开发时会大量的使用到这种形式,其中就包括我们的网络请求。
结合 iOS - RxSwift 项目实战记录 中所述的“MJRefresh在RxSwift中的使用”,在output中定义了一个变量
let refreshStatus = Variable<LXFRefreshStatus>(.none)
controller通过output将其进行监听,从而当值发生变化时,controller就能实时获取当前应所处的刷新状态
vmOutput.refreshStatus.asObservable().subscribe(onNext: {
[weak self] status in
switch status {
case .beingHeaderRefresh:
self?.tableView.mj_header.beginRefreshing()
case .endHeaderRefresh:
self?.tableView.mj_header.endRefreshing()
case .beingFooterRefresh:
self?.tableView.mj_footer.beginRefreshing()
case .endFooterRefresh:
self?.tableView.mj_footer.endRefreshing()
case .noMoreData:
self?.tableView.mj_footer.endRefreshingWithNoMoreData