美文网首页
Rxswift入坑系列(3)

Rxswift入坑系列(3)

作者: lotawei | 来源:发表于2017-11-09 17:57 被阅读5次

rxswift近期使用总结

  • 先说坑吧
  • 1
   let  typechange = Observable.just(task.type)
        
       typechange.subscribe(onNext: { 
            print($0)
            
       }).disposed(by: self.disposebag)
    
  • 2
 let  typechange = Observable.just(task.type)
       
       typechange.subscribe(print($0) ).disposed(by: self.disposebag)

方式一和二是完全不相同的方式一是正常的当task.type 产生时就直接变化了序列中 subscribe中只会有一次,但是第二种方式貌似不是这样的会多一次nil的信号最终都会跑一次

  • 3
    rx的使用心得开始不太熟悉这一套操作,先描述一个情景
    对于多任务的数组管理,我们往往会抽象出一个实例化来管理,比如说一个task数组 中有很多person 其中一个界面会展示所有 person的姓名,但是person如果都有几个状态,我们认为,假定有已死 存活 失联的状态 当我们数组发生改变时会特定通知(要么代理 要么通知 要么block , 要么写监听)当前界面才能及时刷新, 不是说这种方式有什么不好的,我们都知道现在的主流开发都是基于驱动数据编程的,我们都希望我们的数据在那 它变那么我们的其它视图也好什么的都能同一变了这就是Vm最核心体现出来的价值//虽然他让这些变得不太好调试但是你照着规则走就是OK的,体现在编程中的情形就是 全局里有个任务的数组,你会经过一些交互让数组中的对象保持交互后的最新状态同时其它界面需要做出相应变化那么rx或许是真的让你避免写传统的通知监听代理闭包,它使用起来或许是这样的
    struct Person { var name:String! var status:Int! init(_ name:String) { status = 0 self.name = name } }
    class VmPerson: NSObject { static var shareps:VmPerson = VmPerson() var p:Variable<[Person]>! func bind(p:[Person]) { self.p = Variable(p) } func updatevalue(index:Int,new:Person){ if p != nil { if index >= 0 && index < self.p.value.count { self.p.value[index] = new } } } }
    使用的时候
    // var aboresult = VmPerson.shareps let v1 = Person("哼哼哼") let v2 = Person( "老太婆") let v3 = Person( "蓝泽哇") aboresult.bind(p: [v1,v2,v3]) self.aboresult.p.asObservable().bind(to: self.tableView.rx.items){ (tableview,item,task) in let cell = self.tableView.dequeueReusableCell(withIdentifier: "TaskCell") if task.status == 1 { cell?.textLabel?.text = "状态改变了" } else{ cell?.textLabel?.text = task.name } return cell! }.disposed(by: self.disposeBag)
    //到此完毕 以后需要更新的
    更改 aboresult.p.value 即可 内部的数据改掉界面会马上是新的状态,确实是帮我们做了很多事
    3.driver 比variable 更强大的特性

它不会发射出错误(Error)事件
对它的观察订阅是发生在主线程(UI线程)的
自带shareReplayLatestWhileConnected
想不想像demo中那样使用

varible 和observerble对象可以采用bindto的方式

driver 对象可以采用driver的方式

它可以做的事是什么???? 看我把你抠出来
描述个情景我有一个类对象比如人它有名字,当这个名字变化时我希望有其它的对象来知道这个变化及时的刷新自己的状态就是这么简单,varible和driver包裹的对象,在数据变化的时候能刺激并相应相关的函数
实现方式很简单想要的控件扩展一个就OK了

 var rx_loginEnable: AnyObserver<Bool> {
        return UIBindingObserver(UIElement: self, binding: { (button, bool) in
            self.enabled = bool
            if bool {
                button.backgroundColor = UIColor.greenColor()
            }else{
                button.backgroundColor = UIColor.redColor()
            }
        }).asObserver()
    }}  

类似这样用起来就可以这样了

   let  driverperson = Driver<Person("和咯")>
   driverperson.driver(btn.rx_loginEnable).adddisposebag(dispbag)

相关文章

  • Rxswift入坑系列(3)

    rxswift近期使用总结 先说坑吧 1 2 方式一和二是完全不相同的方式一是正常的当task.type 产生时就...

  • RXSwift学习资料

    使用自带教程入门 RxSwift 入坑手册 Part0 - 基础概念 RxSwift 入坑手册 Part1 - 示...

  • Rxswift入坑系列(2)

    rx 不建议开始就硬要把基础的啃透了在入手 只需要看的懂做了什么,做完有什么效果可以先入手一些实战了. 模仿官方d...

  • Rxswift入坑系列(1)

    必须的swift需要会 推荐大家一个学习swift的最好的网站https://www.raywenderlich....

  • 【RxSwift 实践系列 2/3】thinking in Rx

    ---> 上节 【RxSwift 实践系列 1/3】为什么使用RxSwift RxSwift 是一种编程思想,不...

  • RXSwift 入坑记

    以前一直都是命令式编程,这个view干嘛,那个label干嘛,这样的代码写了几个世纪了,实在是疲劳了而且重复使用率...

  • RxSwift入坑笔记

    自学Swift有一段时间了,在一个技术群里偶然听到RxSwift的概念,了解了以后,觉得很有必要学一学。但是开始接...

  • RxSwift 网络请求

    一、说明 入坑RxSwift 有段时间了,之前在项目中只是小范围的使用RxSwift,为了更好的使用响应式编程,决...

  • RxSwift项目实践

    RxSwift-MVVM 这个项目是入坑RxSwift以来的一些收获,历经多个真实项目的实践。我也一直在为写出简洁...

  • Phalcon如何切换数据库《Phalcon入坑指南系列 三》

    本系列目录 一、Phalcon在Windows上安装 《Phalcon入坑指南系列 一》 二、Phalcon入坑必...

网友评论

      本文标题:Rxswift入坑系列(3)

      本文链接:https://www.haomeiwen.com/subject/gvjmmxtx.html