RxSwift笔记七其他操作符
簡介
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
將兩個序列合并成一個序列,當一個序列中的所有元素成功發射完成之后,才會發射另一個序列中的元素。 在第一個序列發射完成之前,第二個序列發射的事件都會被忽略,但會接收第一個序列發射完成前第二個序列發射的最后一個事件。
注
如有侵權,請告知刪除.
轉載于:https://juejin.im/post/5ab1ee7a518825555c1d887a
總結
以上是生活随笔為你收集整理的RxSwift笔记七其他操作符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐两个适合代码的字体
- 下一篇: Matlab图像识别/检索系列(8)—开