一.简介
git地址: https://github.com/ReactiveX/RxSwift
参考资料:http://t.swift.gg/d/2-rxswift
ReactiveX是经过可观察的流实现异步编程的一种API,它结合了观察者模式、迭代器模式和函数式编程的精华,RxSwift 是 ReactiveX 编程思想的一种实现。
复制代码
Subjct
Subject既是一个Observer,又是一个Observable,它能够订阅Observable,有能够被其余的Observer订阅,它能够传递/转发做为Observer收到的值,也能够主动发射值.
Subject分为4类:PublishSubject,ReplaySubject,BehaviorSubject,Variable
复制代码
1.PublishSubject
PublishSubject当被观察者订阅时,观察者会收到PublishSubject在订阅后发出的数据.也就是说,这里会存在数据丢失的问题,若是须要所有数据,可以使用ReplaySubject.
复制代码
发生错误时:
let bag = DisposeBag()
let publishSubject = PublishSubject<String>()
publishSubject.subscribe { e in
print("Subscription: 1, event: \(e)")
}.addDisposableTo(bag)
publishSubject.on(.Next("a"))
publishSubject.on(.Next("b"))
///这里不会收到'a','b'
publishSubject.subscribe { e in
print("Subscription: 2, event: \(e)")
}.addDisposableTo(bag)
publishSubject.on(.Next("c"))
publishSubject.on(.Next("d"))
复制代码
ReplaySubject
不论观察者什么时候订阅ReplaySubject,观察者均可以收到完整的数据.
复制代码
let bag = DisposeBag()
let replaySubject = ReplaySubject<String>.create(bufferSize: 2)
replaySubject.subscribe { e in
print("Subscription: 1, event: \(e)")
}.addDisposableTo(bag)
replaySubject.on(.Next("a"))
replaySubject.on(.Next("b"))
///这里会收到四个数据
replaySubject.subscribe { e in
print("Subscription: 2, event: \(e)")
}.addDisposableTo(bag)
replaySubject.on(.Next("c"))
replaySubject.on(.Next("d"))
复制代码
BehaviorSubject
当观察者订阅一个BehaviorSubject时,BehaviorSubject会发送被订阅前最近一次的数据给观察者,若是没有数据,则会发送一个默认值,以后正常发送数据.
BehaviorSubject有一个好处就是当被订阅时,至少能够收到最新的一个值。
复制代码
let bag = DisposeBag()
let behaviorSubject = BehaviorSubject(value: "z")
behaviorSubject.subscribe { e in
print("Subscription: 1, event: \(e)")
}.addDisposableTo(bag)
behaviorSubject.on(.Next("a"))
behaviorSubject.on(.Next("b"))
behaviorSubject.subscribe { e in /// 咱们能够在这里看到,这个订阅收到了三个数据
print("Subscription: 2, event: \(e)")
}.addDisposableTo(bag)
behaviorSubject.on(.Next("c"))
behaviorSubject.on(.Next("d"))
behaviorSubject.on(.Completed)
复制代码
Variable
Variable 是 BehaviorSubject 的一个封装.相比 BehaviorSubject ,它不会由于错误终止也不会正常终止,是一个无限序列,一样具有了缓存最新值和提供默认值的能力.可是Variable没有on系列方法,只提供了value属性.直接对value进行set等同于调用了onNext()方法.这代表了Variable不会发射error也不会发射completed.在Variable被销毁的时候会调用发射completed给Observer.在订阅Variable的时候,咱们没法直接调用subscribe方法,须要先调用asObservable()方法。
```
let variable = Variable<Int>(1)
variable.asObservable().subscribe({ (event) in
print("Event:\(event)")
})
variable.value = 2
/// Event:next(1)
///Event:next(2)
///Event:completed
```
复制代码
注:
部份内容摘自其余博客,若有侵权,请及时告知删除!复制代码