RxSwift中的組合操作

今天談一下RxSwift中的組合操作,和RAC一樣??梢詤⒄誖AC理解。

Combination Operators在RxSwift中的實(shí)現(xiàn)有五種:

  • startWith
  • merge
  • zip
  • combineLatest
  • switchLatest

StartWith

在Observable釋放元素之前,發(fā)射指定的元素序列


StartWith.png
 let disposeBag = DisposeBag()
        Observable.of(["1","2","3"]).startWith(["0"]).subscribe({ (event) in
            print(event)
        }).disposed(by: disposeBag)

執(zhí)行結(jié)果如下:

next(["0"])
next(["1", "2", "3"])
completed

Merge

將多個(gè)Observable組合成單個(gè)Observable,并且按照時(shí)間順序發(fā)射對(duì)應(yīng)事件

Merge.png
       let disposeBag = DisposeBag()
        
        let subject1 = PublishSubject<String>()
        let subject2 = PublishSubject<String>()
        
        Observable.of(subject1, subject2)
            .merge()
            .subscribe(onNext: { print($0) })
            .disposed(by: disposeBag)
        
        subject1.onNext("")
        subject1.onNext("")
        subject2.onNext("")
        subject2.onNext("??")
        subject1.onNext("")
        subject2.onNext("???")



??

???

zip

將多個(gè)Observable(注意:必須是要成對(duì))組合成單個(gè)Observable,當(dāng)有事件到達(dá)時(shí),會(huì)在每個(gè)序列中對(duì)應(yīng)的索引上對(duì)應(yīng)的元素發(fā)出。

zip.png
   let disposeBag = DisposeBag()
    
    let subject1 = PublishSubject<String>()
    let subject2 = PublishSubject<String>()
    
    Observable.zip(subject1, subject2) { string1,string2 in
        "\(string1)--\(string2)"
        }.subscribe(onNext: {print($0)}).disposed(by: disposeBag)
    
    subject1.onNext("A")
    subject1.onNext("B")
    subject1.onNext("C")
    
    subject2.onNext("1")
    subject2.onNext("2")
A--1
B--2

combineLatest

combineLatest.png

當(dāng)一個(gè)項(xiàng)目由兩個(gè)Observables發(fā)射時(shí),通過一個(gè)指定的功能將每個(gè)Observable觀察到的最新項(xiàng)目組合起來,并根據(jù)該功能的結(jié)果

let disposeBag = DisposeBag()
let subject1 = PublishSubject<String>()
let subject2 = PublishSubject<String>()

Observable.combineLatest(subject1, subject2) { string1,string2 in
        "\(string1)--\(string2)"
  }.subscribe(onNext: {print($0)}).disposed(by: disposeBag)
    
subject1.onNext("A")
subject2.onNext("1")
subject2.onNext("2")
subject1.onNext("B")
subject1.onNext("C")

執(zhí)行結(jié)果:

A--1
A--2
B--2
C--2

switchLatest

切換Observable隊(duì)列

let disposeBag = DisposeBag()

let subject1 = BehaviorSubject(value: "1")
let subject2 = BehaviorSubject(value: "A")

let variable = Variable(subject1)

variable.asObservable()
    .switchLatest()
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

subject1.onNext("2")
subject1.onNext("3")

variable.value = subject2

subject1.onNext("4")
subject2.onNext("B")

執(zhí)行結(jié)果:

1
2
3
A
B
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前面的內(nèi)容中已經(jīng)學(xué)習(xí)了如何創(chuàng)建, 過濾, 變換 observable 的事件序列, 尤其是需要留意 flatMap...
    貘鳴閱讀 1,930評(píng)論 0 2
  • 響應(yīng)式編程簡介 響應(yīng)式編程是一種基于異步數(shù)據(jù)流概念的編程模式。數(shù)據(jù)流就像一條河:它可以被觀測(cè),被過濾,被操作,或者...
    說碼解字閱讀 3,557評(píng)論 0 5
  • 注:只包含標(biāo)準(zhǔn)包中的操作符,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,376評(píng)論 2 8
  • 最近在學(xué)習(xí)RxSwift相關(guān)的內(nèi)容,在這里記錄一些基本的知識(shí)點(diǎn),以便今后查閱。 Observable 在RxSwi...
    L_Zephyr閱讀 1,897評(píng)論 1 4
  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應(yīng)式編程作為結(jié)合使用的,對(duì)什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,987評(píng)論 0 10

友情鏈接更多精彩內(nèi)容