生活随笔
收集整理的這篇文章主要介紹了
[RxSwift教程]9、过滤操作符:filter、take、skip等
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
?微信公眾號:山青詠芝(let_us_code)
?博主域名:https://www.zengqiang.org
?GitHub地址:https://github.com/strengthen/LeetCode
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
強烈推薦?。。≡囉貌┲鱾€人App作品!提需求!提建議!
App Store搜索:【Mind Draft】
中國區可直接點擊跳轉:【Mind Draft】
九、過濾操作符(Filtering Observables)
過濾操作指的是從源Observable中選擇特定的數據發送。
1,filter
(1)基本介紹
該操作符就是用來過濾掉某些不符合要求的事件。
(2)使用樣例
1
2
3
4
5
6
7
8
|
letdisposeBag =DisposeBag()
Observable.of(2, 30, 22, 5, 60, 3, 40 ,9)
.filter{
$0 > 10
}
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
|
運行結果如下:
2,distinctUntilChanged
(1)基本介紹
該操作符用于過濾掉連續重復的事件。
(2)使用樣例
1
2
3
4
5
6
|
letdisposeBag =DisposeBag()
Observable.of(1, 2, 3, 1, 1, 4)
.distinctUntilChanged()
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
|
運行結果:
3,single
(1)基本介紹
限制只發送一次事件,或者滿足條件的第一個事件。
如果存在有多個事件或者沒有事件都會發出一個error事件。
如果只有一個事件,則不會發出error事件。
(2)使用樣例
1
2
3
4
5
6
7
8
9
10
11
|
letdisposeBag =DisposeBag()
Observable.of(1, 2, 3, 4)
.single{ $0 == 2 }
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
Observable.of("A","B","C","D")
.single()
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
|
運行結果:
4,elementAt
(1)基本介紹
該方法實現只處理在指定位置的事件。
(2)使用樣例
1
2
3
4
5
6
|
letdisposeBag =DisposeBag()
Observable.of(1, 2, 3, 4)
.elementAt(2)
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
|
運行結果如下:
5,ignoreElements
(1)基本介紹
該操作符可以忽略掉所有的元素,只發出error或completed事件。
如果我們并不關心Observable的任何元素,只想知道Observable在什么時候終止,那就可以使用ignoreElements操作符。
(2)使用樣例
1
2
3
4
5
6
7
8
|
letdisposeBag =DisposeBag()
Observable.of(1, 2, 3, 4)
.ignoreElements()
.subscribe{
print($0)
}
.disposed(by: disposeBag)
|
運行結果如下:
6,take
(1)基本介紹
該方法實現僅發送Observable序列中的前n個事件,在滿足數量之后會自動.completed。
(2)使用樣例
1
2
3
4
5
6
|
letdisposeBag =DisposeBag()
Observable.of(1, 2, 3, 4)
.take(2)
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
|
運行結果如下:
7,takeLast
(1)基本介紹
該方法實現僅發送Observable序列中的后n個事件。
(2)使用樣例
1
2
3
4
5
6
|
letdisposeBag =DisposeBag()
Observable.of(1, 2, 3, 4)
.takeLast(1)
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
|
運行結果如下:
8,skip
(1)基本介紹
該方法用于跳過源Observable序列發出的前n個事件。
(2)使用樣例
1
2
3
4
5
6
|
let disposeBag = DisposeBag()
Observable.of(1, 2, 3, 4)
.skip(2)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
|
運行結果如下:
9,Sample
(1)基本介紹
Sample除了訂閱源Observable外,還可以監視另外一個Observable, 即notifier。
每當收到notifier事件,就會從源序列取一個最新的事件并發送。而如果兩次notifier事件之間沒有源序列的事件,則不發送值。
(2)使用樣例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
letdisposeBag =DisposeBag()
letsource =PublishSubject<Int>()
letnotifier =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()
|
運行結果如下:
10,debounce
(1)基本介紹
debounce操作符可以用來過濾掉高頻產生的元素,它只會發出這種元素:該元素產生后,一段時間內沒有新元素產生。
換句話說就是,隊列中的元素如果和下一個元素的間隔小于了指定的時間間隔,那么這個元素將被過濾掉。
debounce常用在用戶輸入的時候,不需要每個字母敲進去都發送一個事件,而是稍等一下取最后一個事件。
(2)使用樣例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
importUIKit
importRxSwift
importRxCocoa
classViewController:UIViewController{
letdisposeBag =DisposeBag()
overridefuncviewDidLoad() {
lettimes = [
["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.from(times)
.flatMap { itemin
returnObservable.of(Int(item["value"]!))
.delaySubscription(Double(item["time"]!),
scheduler:MainScheduler.instance)
}
.debounce(0.5, scheduler:MainScheduler.instance)
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
}
}
|
運行結果如下:
總結
以上是生活随笔為你收集整理的[RxSwift教程]9、过滤操作符:filter、take、skip等的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。