一.簡介
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
```
複製代碼
注:
部份內容摘自其餘博客,若有侵權,請及時告知刪除!複製代碼