-
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等)