簡介
git地址: https://github.com/ReactiveX/RxSwift參考資料:http://t.swift.gg/d/2-rxswiftReactiveX是通過可觀察的流實現異步編程的一種API,它結合了觀察者模式、迭代器模式和函數式編程的精華,RxSwift 是 ReactiveX 編程思想的一種實現。
復制代碼
subscribe
訂閱,是連接觀察者和被觀察者的操作符.
public func subscribe(on: (event: RxSwift.Event<Self.E>) -> Void) -> Disposable
就是說我們接收到的是事件,在這里一般通過 switch case 獲取對應結果。
let sequenceOfInts = PublishSubject<Int>()_ = sequenceOfInts.subscribe {print($0)
}sequenceOfInts.on(.Next(1))
sequenceOfInts.on(.Completed)
復制代碼
subscribeNext
指訂閱next事件.
public func subscribeNext(onNext: (Self.E) -> Void) -> Disposable
因為只有一種事件,這里的 API 傳入的就是事件中包含的具體的值了。
let sequenceOfInts = PublishSubject<Int>()_ = sequenceOfInts.subscribeNext {print($0)
}sequenceOfInts.on(.Next(1))
sequenceOfInts.on(.Completed)
復制代碼
subscribeCompleted / subscribeError
只訂閱完成/錯誤事件.
subscribeOnnextOnErrorOnCompleted
public func subscribe(onNext onNext: (Self.E -> Void)? = default, onError: (ErrorType -> Void)? = default, onCompleted: (() -> Void)? = default, onDisposed: (() -> Void)? = default) -> Disposable
takeUntil
當另一個序列開始發射值時,忽略原序列發射的值。
let originalSequence = PublishSubject<Int>()
let whenThisSendsNextWorldStops = PublishSubject<Int>()_ = originalSequence.takeUntil(whenThisSendsNextWorldStops).subscribe {print($0)
}originalSequence.on(.Next(1))
originalSequence.on(.Next(2))
originalSequence.on(.Next(3))whenThisSendsNextWorldStops.on(.Next(1))originalSequence.on(.Next(4))
復制代碼
takeWhile
跟filter類似,filter 和 takeWhile 什么時候更能清晰表達你的意思,就用哪個。
let sequence = PublishSubject<Int>()_ = sequence.takeWhile { $0 < 4 }.subscribe {print($0)
}sequence.on(.Next(1))
sequence.on(.Next(2))
sequence.on(.Next(3))
sequence.on(.Next(4))
sequence.on(.Next(5))
復制代碼
amb
處理多個序列,只會關心多個序列中最先發送數據的序列,其他序列會被忽略.
let intSequence1 = PublishSubject<Int>()
let intSequence2 = PublishSubject<Int>()
let intSequence3 = PublishSubject<Int>()let _ = [intSequence1, intSequence2, intSequence3].amb().subscribe {print($0)
}intSequence2.onNext(10) // intSequence2 最先發射
intSequence1.onNext(1)
intSequence3.onNext(100)
intSequence1.onNext(2)
intSequence3.onNext(200)
intSequence2.onNext(20)let intSequence1 = PublishSubject<Int>()
let intSequence2 = PublishSubject<Int>()let _ = intSequence1.amb(intSequence2).subscribe { // 只用于比較兩個序列print($0)
}intSequence2.onNext(10) // intSequence2 最先發射
intSequence1.onNext(1)
intSequence1.onNext(2)
intSequence2.onNext(20)復制代碼
concat
將兩個序列合并成一個序列,當一個序列中的所有元素成功發射完成之后,才會發射另一個序列中的元素。 在第一個序列發射完成之前,第二個序列發射的事件都會被忽略,但會接收第一個序列發射完成前第二個序列發射的最后一個事件。
注
如有侵權,請告知刪除.