订阅之后 ,才开始发送信号
func rx_PublishSubject(){ // 创建rx 回收管理 let disposeBag = DisposeBag() let subject = PublishSubject<Int>()//<填观察的类型>;这是创建方法,command点进可以看到 // 作为观察量序列,去订阅还未实现的 观察序列,但是值类型是知道的,就是<这个类型> subject.subscribe{print("作为一个观察量序列,这个序列只有打印事件,接收的信号是:\($0)")}.addDisposableTo(disposeBag) // 作为观察者,实现 发送信号的观察序列 subject.onNext(1) subject.onNext(2) subject.subscribe(onNext: { k in print("2个序列,接收的信号是:\(k)") }, onCompleted: { print("完成了") }) { print("结束") }.addDisposableTo(disposeBag) subject.onNext(9) subject.onCompleted() }ReplaySubject 在新的订阅出现的时候会补发前几条数据, bufferSize控制着具体补发前边几条数据 , 1就是补发一条, 2就是补发两条, 以此类推,补发的顺序按照顺序 倒数条数,例如123,size=2,补发23
func rx_RePlaySubject(){ let disposeBag = DisposeBag() // 创建 let subject = ReplaySubject<String>.create(bufferSize: 1) // 观察量序列 去订阅 subject.subscribe { print("打印订阅——1:\($0)") }.addDisposableTo(disposeBag) // 观察者 发送序列信号 subject.onNext("小美") subject.onNext("小惠") subject.onNext("小花") //新的订阅 subject.subscribe{ print("新的订阅——2:\($0)")}.addDisposableTo(disposeBag) // 发送信号 subject.onNext("明明") subject.onNext("东东") } // 打印结果:在正常的订阅基础上,新增订阅补发信号 //打印订阅——1:next(小美) //打印订阅——1:next(小惠) //打印订阅——1:next(小花) //新的订阅——2:next(小花) 这里是在补发数据,创建的时候填写的1,所以补发一条 //打印订阅——1:next(明明) //新的订阅——2:next(明明) //打印订阅——1:next(东东) //新的订阅——2:next(东东)上面一个例子是新的订阅会补发size条信号 这里是有订阅的时候会补发最近一条信号,如果是第一个订阅则补发预设的默认值
func rx_BehaviorSubject() { let disposeBag = DisposeBag() let subject = BehaviorSubject(value: "o") subject.subscribe{print("1——\($0)")}.addDisposableTo(disposeBag) subject.onNext("a") subject.onNext("s") subject.subscribe{print("2——\($0)")}.addDisposableTo(disposeBag) subject.onNext("d") subject.onNext("f") subject.subscribe{print("3——\($0)")}.addDisposableTo(disposeBag) subject.onNext("g") subject.onNext("h") }Variable 比较特殊,是一个最终类,没有任何继承,所以它不是观察量序列 也不是观察者,不过类里面有相应的方法转换,具体看下面例子
那Variable的效果是什么呢,和上一个例子(订阅的时候会补发最近一条信号,如果是第一个订阅则补发预设的默认值)一样,当然多了点东西,它不是observe、Observable,所以没有观察者事件,也就是发送信号,所以Variable执行完,封装好了自动发送completed信号
func rx_Variable(){ let disposeBag = DisposeBag() //创建 let subject = Variable<String>("默认") // 本身没有继承自观察量序列(Observable),asObservable()返回观察量序列 订阅 subject.asObservable().subscribe{print("event1——\($0)")}.addDisposableTo(disposeBag) // 发信号,本身不是订阅者,不能调用on方法,点进去,是设置value属性 subject.value = "第一次" subject.value = "第二次" subject.asObservable().subscribe{print("event2——\($0)")}.addDisposableTo(disposeBag) subject.value = "第三次" subject.value = "第四次" subject.asObservable().subscribe{print("event3——\($0)")}.addDisposableTo(disposeBag) subject.value = "第五次" subject.value = "第六次" }