一、首先面向开发我们看看RxSwift在TableView的应用
- TableView的点击、复选、新增、删除、移动全部简洁实现
- RxSwift一旦遇上了TableView,根本不需要那些恶心的胶水代码
- delegate & dataSource的赋值直接免去
- 胶水代理以及数据源代理的实现(毕竟我们现在列表界面越来越多,胶水的代码的优化,太爽了)
- 我们所有的事件订阅都在相应地方,我们更容易管理
- 函数式回调导致我们的逻辑代码与功能代码绑定在一块,可读性更强
二、分组的TableView
- RxCocoa封装的dataSourcer让我们爽的无法自拔
- dataSource的承担了整个数据源代理,并且强势封装了代理
- 数据层的响应直接绑定到了UI,让数据更简单传输
- 从上面的代码一眼就能看出,RxSwift让我们的开发更直接面向开发,让开发更容易
MVVM双向绑定
- 这里就是我们RxSwift世界里的ViewController,这才是真正的轻量化的VC,至始至终都只做一件事:建立View与ViewModel之间的绑定依赖关系
- 通过我们搜索栏的响应,发送数据给我们的ViewModel,让它在它的世界里处理业务层,网络层数据的返回
- 通过ViewModel响应对外,达到数据绑定到UI的效果
- 在ViewModel里面我们运用RxSwift的高阶函数,处理逻辑
- UI事件搜索的响应传入,通过一个懒加载的数据返回
- 这个响应的序列通过throttle保证了相隔0.3秒发送一次事件
- distinctUntilChanged函数保证了带宽,直到搜索字眼变动的时候才请求
- flatMapFirst因为序列的序列,我们下沉请求,回调结果
- asDriver包装成Drive序列,保证状态共享,主线程调度,没有错误返回
- 通过上面的响应,这里封装网络URLSession.shared.rx.json,返回json
- 为了保证请求网络在子线程,这里调用observeOn
- 请求回来的数据还不是我们所想要的,这里map映射,下沉的序列化结果
- 这里就是普通的判空,然后通过HandJSON进行数据解析
- 返回的结果序列成模型数组,然后返回响应
- 响应层层下发,数据层层处理上升
- 根据外界的关系,完美实现双向绑定
完美实现联动,MVVM双向绑定加入RxSwift的身影也就更出色