MVVM中的双向绑定

MVVM中的双向绑定

一、首先面向开发我们看看RxSwift在TableView的应用

MVVM中的双向绑定

  • TableView的点击、复选、新增、删除、移动全部简洁实现
  • RxSwift一旦遇上了TableView,根本不需要那些恶心的胶水代码
  • delegate & dataSource的赋值直接免去
  • 胶水代理以及数据源代理的实现(毕竟我们现在列表界面越来越多,胶水的代码的优化,太爽了)
  • 我们所有的事件订阅都在相应地方,我们更容易管理
  • 函数式回调导致我们的逻辑代码与功能代码绑定在一块,可读性更强

二、分组的TableView

MVVM中的双向绑定

  • RxCocoa封装的dataSourcer让我们爽的无法自拔
  • dataSource的承担了整个数据源代理,并且强势封装了代理
  • 数据层的响应直接绑定到了UI,让数据更简单传输
  • 从上面的代码一眼就能看出,RxSwift让我们的开发更直接面向开发,让开发更容易

MVVM中的双向绑定

MVVM双向绑定

MVVM中的双向绑定

  • 这里就是我们RxSwift世界里的ViewController,这才是真正的轻量化的VC,至始至终都只做一件事:建立View与ViewModel之间的绑定依赖关系
  • 通过我们搜索栏的响应,发送数据给我们的ViewModel,让它在它的世界里处理业务层,网络层数据的返回
  • 通过ViewModel响应对外,达到数据绑定到UI的效果
  • 在ViewModel里面我们运用RxSwift的高阶函数,处理逻辑

MVVM中的双向绑定

  • UI事件搜索的响应传入,通过一个懒加载的数据返回
  • 这个响应的序列通过throttle保证了相隔0.3秒发送一次事件
  • distinctUntilChanged函数保证了带宽,直到搜索字眼变动的时候才请求
  • flatMapFirst因为序列的序列,我们下沉请求,回调结果
  • asDriver包装成Drive序列,保证状态共享,主线程调度,没有错误返回

MVVM中的双向绑定

  • 通过上面的响应,这里封装网络URLSession.shared.rx.json,返回json
  • 为了保证请求网络在子线程,这里调用observeOn
  • 请求回来的数据还不是我们所想要的,这里map映射,下沉的序列化结果

MVVM中的双向绑定

  • 这里就是普通的判空,然后通过HandJSON进行数据解析
  • 返回的结果序列成模型数组,然后返回响应
  • 响应层层下发,数据层层处理上升
  • 根据外界的关系,完美实现双向绑定

完美实现联动,MVVM双向绑定加入RxSwift的身影也就更出色

相关推荐