日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

[RxSwift教程]9、过滤操作符:filter、take、skip等

發布時間:2024/1/4 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 [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 序列并訂閱
Observable.from(times)
.flatMap { itemin
returnObservable.of(Int(item["value"]!))
.delaySubscription(Double(item["time"]!),
scheduler:MainScheduler.instance)
}
.debounce(0.5, scheduler:MainScheduler.instance)//只發出與下一個間隔超過0.5秒的元素
.subscribe(onNext: {print($0) })
.disposed(by: disposeBag)
}
}

運行結果如下:

總結

以上是生活随笔為你收集整理的[RxSwift教程]9、过滤操作符:filter、take、skip等的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。