過濾操作符:filter、distinctUntilChanged艇搀、single尿扯、elementAt、ignoreElements焰雕、take衷笋、takeLast、skip矩屁、sample辟宗、debounce

  • filter

    該操作符就是用來過濾掉某些不符合要求的事件
Observable.of(2, 30, 22, 5, 60, 3, 40 ,9)
    .filter {
        $0 > 10
    }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • distinctUntilChanged

    該操作符用于過濾掉連續(xù)重復的事件
Observable.of(1, 2, 3, 1, 1, 4)
    .distinctUntilChanged()
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • single

    限制只發(fā)送一次事件,或者滿足條件的第一個事件
    如果存在有多個事件或者沒有事件都會發(fā)出一個 error 事件
    如果只有一個事件吝秕,則不會發(fā)出 error 事件
Observable.of(1, 2, 3, 4)
    .single{ $0 == 2 }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
 
// 會發(fā)出error
Observable.of("A", "B", "C", "D")
    .single()
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • elementAt

    該操作符實現(xiàn)只處理在指定位置的事件
Observable.of(1, 2, 3, 4)
    .elementAt(2)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • ignoreElements

    該操作符可以忽略掉所有的元素泊脐,只發(fā)出 error 或 completed 事件
    如果我們并不關(guān)心 Observable 的任何元素,只想知道 Observable 在什么時候終止烁峭,那就可以使用 ignoreElements 操作符
Observable.of(1, 2, 3, 4)
    .ignoreElements()
    .subscribe{
        print($0)
    }
    .disposed(by: disposeBag)
  • take

    該方法實現(xiàn)僅發(fā)送 Observable 序列中的前 n 個事件容客,在滿足數(shù)量之后會自動 .completed
Observable.of(1, 2, 3, 4)
    .take(2)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • takeLast

    該方法實現(xiàn)僅發(fā)送 Observable 序列中的后 n 個事件
Observable.of(1, 2, 3, 4)
    .takeLast(1)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • skip

    該方法用于跳過源 Observable 序列發(fā)出的前 n 個事件
Observable.of(1, 2, 3, 4)
    .skip(2)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
  • sample

    Sample 除了訂閱源 Observable 外,還可以監(jiān)視另外一個 Observable约郁, 即 notifier
    每當收到 notifier 事件缩挑,就會從源序列取一個最新的事件并發(fā)送,即源序列事件是由notifier序列來觸發(fā)的鬓梅。而如果兩次 notifier 事件之間沒有源序列的事件谤牡,則不發(fā)送值
let source = PublishSubject<Int>()
let notifier = PublishSubject<String>()
 
source
    .sample(notifier)
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
 
source.onNext(1)
 
//讓源序列接收接收消息
notifier.onNext("A")
 
source.onNext(2)
 
//讓源序列接收接收消息
notifier.onNext("B")
notifier.onNext("C")
 
source.onNext(3)
source.onNext(4)
 
//讓源序列接收接收消息
notifier.onNext("D")
 
source.onNext(5)
 
//讓源序列接收接收消息
notifier.onCompleted()
  • debounce

    debounce 操作符可以用來過濾掉高頻產(chǎn)生的元素呵晚,它只會發(fā)出這種元素:該元素產(chǎn)生后,一段時間內(nèi)沒有新元素產(chǎn)生
    換句話說就是,隊列中的元素如果和下一個元素的間隔小于了指定的時間間隔泞当,那么這個元素將被過濾掉
    debounce 常用在用戶輸入的時候胆绊,不需要每個字母敲進去都發(fā)送一個事件忽媒,而是稍等一下取最后一個事件
let times = [
            [ "value": 1, "time": 0.1 ],
            [ "value": 2, "time": 1.1 ],
            [ "value": 3, "time": 1.2 ],
            [ "value": 4, "time": 1.2 ],
            [ "value": 5, "time": 1.4 ],
            [ "value": 6, "time": 2.1 ]
        ]
        
//生成對應的 Observable 序列并訂閱
Observable.from(times)
    .flatMap { item in
        return Observable.of(Int(item["value"]!))
            .delaySubscription(Double(item["time"]!), scheduler: MainScheduler.instance)
            }
    .debounce(0.5, scheduler: MainScheduler.instance) //只發(fā)出與下一個間隔超過0.5秒的元素
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

參考文章:Swift - RxSwift的使用詳解9(過濾操作符:filter膛锭、take、skip等)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艘绍,一起剝皮案震驚了整個濱河市赤拒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诱鞠,老刑警劉巖挎挖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異航夺,居然都是意外死亡蕉朵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門阳掐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來始衅,“玉大人冷蚂,你說我怎么就攤上這事⊙凑ⅲ” “怎么了蝙茶?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诸老。 經(jīng)常有香客問我隆夯,道長,這世上最難降的妖魔是什么别伏? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任蹄衷,我火速辦了婚禮,結(jié)果婚禮上畸肆,老公的妹妹穿的比我還像新娘宦芦。我一直安慰自己宙址,他們只是感情好轴脐,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抡砂,像睡著了一般大咱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上注益,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天碴巾,我揣著相機與錄音,去河邊找鬼丑搔。 笑死厦瓢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的啤月。 我是一名探鬼主播煮仇,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谎仲!你這毒婦竟也來了浙垫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤郑诺,失蹤者是張志新(化名)和其女友劉穎夹姥,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辙诞,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡辙售,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了飞涂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圾亏。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡十拣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出志鹃,到底是詐尸還是另有隱情夭问,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布曹铃,位于F島的核電站缰趋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏陕见。R本人自食惡果不足惜秘血,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望评甜。 院中可真熱鬧灰粮,春花似錦、人聲如沸忍坷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佩研。三九已至柑肴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旬薯,已是汗流浹背晰骑。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绊序,地道東北人硕舆。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像骤公,于是被迫代替她去往敵國和親抚官。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位淋样,與響應式編程作為結(jié)合使用的耗式,對什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,866評論 0 10
  • 一趁猴、RxJava操作符概述 RxJava中的操作符就是為了提供函數(shù)式的特性刊咳,函數(shù)式最大的好處就是使得數(shù)據(jù)處理簡潔易...
    BrotherChen閱讀 1,623評論 0 10
  • 一、RxJava操作符概述 RxJava中的操作符就是為了提供函數(shù)式的特性儡司,函數(shù)式最大的好處就是使得數(shù)據(jù)處理簡潔易...
    測天測地測空氣閱讀 637評論 0 1
  • 一娱挨、RxJava操作符概述 RxJava中的操作符就是為了提供函數(shù)式的特性,函數(shù)式最大的好處就是使得數(shù)據(jù)處理簡潔易...
    無求_95dd閱讀 3,112評論 0 21
  • Subject創(chuàng)建訂閱Source PublishSubject 最普通的subject捕犬,對它訂閱的訂閱者只會收到...
    給傷的你我依然喜歡閱讀 1,112評論 0 1