一.简介
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
```
注:
部分内容摘自其他博客,如有侵权,请及时告知删除!