一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Swift - RxSwift發送及訂閱 Subjects、Variables代碼示例

RxSwift發送及訂閱 Subjects、Variables代碼示例

2021-01-17 20:50芬達 Swift

這篇文章主要介紹了RxSwift發送及訂閱 Subjects、Variables代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Subjects 介紹

1. Subjects 是訂閱者,也是Observable

訂閱者:它能動態的接收新的值。

Observable: 當Subjects有了新值后會通過Event將新值發出給他的所有訂閱者。

2. 常用的方法

  • onNext(:):是on(.next(:)) 的簡便寫法。該方法相當于 subject 接收到一個.next 事件。
  • onError(:):是on(.error(:))的簡便寫法。該方法相當于 subject 接收到一個.error 事件。
  • onCompleted():是 on(.completed)的簡便寫法。該方法相當于 subject 接收到一個 .completed事件。

3. Subjects 有四種PublishSubject、BehaviorSubject、ReplaySubject、Variable

相同點

  • 都是Observable,他們的訂閱者都能接收他們發出的新的Event
  • 直到 Subject 發出 .complete 或者 .error 的 Event 后,該 Subject 便終結了,同時它也就不會再發出.next事件。
  • 對于那些在Subject 終結后再訂閱他的訂閱者,也能收到 subject發出的一條.complete 或.error的event,告訴這個新的訂閱者它已經終結了。

不同點

  • PublishSubject
  • 最普通的Subject,不需要初始值就能初始化。
  • 他的訂閱者只能收到他們訂閱后的 Event。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let sub = PublishSubject<String>()
 
sub.onNext("訂閱之前的不能接收到")
 
sub.subscribe { event in
  print(event.element)
//Optional("訂閱之后的可以接收到")
//nil
}.disposed(by: disposeBag)
 
sub.onNext("訂閱之后的可以接收到")
//結束
sub.onCompleted()
/// 結束之后添加的訂閱能收到 completed
sub.subscribe { event in
  print(event)
}
sub.onNext("結束后發的都收不到")

BehaviorSubject

需要一個默認值初始化

當一個訂閱者訂閱之后會立馬收到上一個Event,之后就是正常情況發一個收一個。

onCompleted()之后的訂閱者也只能收到Completed。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let sub = BehaviorSubject(value: "默認值")
 
sub.subscribe { event in
  print("訂閱1", event)
}.disposed(by: disposeBag)
sub.onNext("發送1")
sub.subscribe { event in
  print("訂閱2", event)
}.disposed(by: disposeBag)
sub.onCompleted()
sub.subscribe { event in
  print("訂閱3", event)
}.disposed(by: disposeBag)
 
訂閱1 next(默認值)
訂閱1 next(發送1)
訂閱2 next(發送1)
訂閱1 completed
訂閱2 completed
訂閱3 completed

ReplaySubject

創建的時候需要一個參數bufferSize設置記錄個數

新添加的訂閱會接收到之前發送的兩個 Event,如果不足兩個就只接收一個。

如果超過兩個只接收最新的兩個。

如果訂閱時已經結束除了會接收到最新的兩個Event外還有結束的complete或error。

?
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
33
34
35
36
37
38
39
40
41
42
43
44
let sub = ReplaySubject<String>.create(bufferSize: 2)
 
sub.subscribe { event in
  print("訂閱1", event)
}.disposed(by: disposeBag)
sub.onNext("發送1")
print("-------")
sub.subscribe { event in
  print("訂閱2", event)
}.disposed(by: disposeBag)
 
sub.onNext("發送2")
sub.onNext("發送3")
sub.onNext("發送4")
print("-------")
sub.subscribe { event in
  print("訂閱3", event)
}.disposed(by: disposeBag)
sub.onCompleted()
print("-------")
/// 不僅會收到最后的兩個 event 還有 Completed
sub.subscribe { event in
  print("訂閱4", event)
}
 
訂閱1 next(發送1)
-------
訂閱2 next(發送1)
訂閱1 next(發送2)
訂閱2 next(發送2)
訂閱1 next(發送3)
訂閱2 next(發送3)
訂閱1 next(發送4)
訂閱2 next(發送4)
-------
訂閱3 next(發送3)
訂閱3 next(發送4)
訂閱1 completed
訂閱2 completed
訂閱3 completed
-------
訂閱4 next(發送3)
訂閱4 next(發送4)
訂閱4 completed

BehaviorRelay

基本同 BehaviorSubject功能一樣,但是不能主動調用onCompleted和error,會在BehaviorRelay釋放前調用

?
1
2
3
4
5
6
7
8
9
let sub = BehaviorRelay(value: "初始值")
 
sub.subscribe { event in
  print("第一次訂閱", event)
}.disposed(by: disposeBag)
sub.accept("新值1")
sub.subscribe { event in
  print("第二次訂閱", event)
}.disposed(by: disposeBag)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/i2yf/p/14016617.html

延伸 · 閱讀

精彩推薦
  • SwiftSwift實現多個TableView側滑與切換效果

    Swift實現多個TableView側滑與切換效果

    這篇文章主要為大家詳細介紹了Swift實現多個TableView側滑與切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • Swiftmac git xcrun error active developer path 錯誤

    mac git xcrun error active developer path 錯誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環境時,出現了錯誤(mac git xcrun error active developer path)的解決辦法,希望對大家有所幫助...

    Swift教程網2232020-12-16
  • SwiftSwift教程之基礎數據類型詳解

    Swift教程之基礎數據類型詳解

    這篇文章主要介紹了Swift教程之基礎數據類型詳解,本文詳細講解了Swift中的基本數據類型和基本語法,例如常量和變量、注釋、分號、整數、數值類型轉換等...

    Swift教程網5162020-12-18
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網上上看到的答案,復制粘貼過來和大家分享一下,因為我和很多人一樣很關心Swift的出現對Mac開發的影響和對Objective-C的影響。...

    Swift教程網4412020-12-16
  • Swiftswift where與匹配模式的實例詳解

    swift where與匹配模式的實例詳解

    這篇文章主要介紹了swift where與匹配模式的實例詳解的相關資料,這里附有簡單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢的魔術師14382021-01-06
  • SwiftSwift的74個常用內置函數介紹

    Swift的74個常用內置函數介紹

    這篇文章主要介紹了Swift的74個常用內置函數介紹,這篇文章列舉出了所有的Swift庫函數,內置函數是指無需引入任何模塊即可以直接使用的函數,需要的朋友可...

    Swift教程網5802020-12-19
  • SwiftSwift使用CollectionView實現廣告欄滑動效果

    Swift使用CollectionView實現廣告欄滑動效果

    這篇文章主要為大家詳細介紹了Swift使用CollectionView實現廣告欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Stevin的技術博客12372021-01-13
  • SwiftSwift中轉義閉包示例詳解

    Swift中轉義閉包示例詳解

    在Swift 中的閉包類似于結構塊,并可以在任何地方調用,下面這篇文章主要給大家介紹了關于Swift中轉義閉包的相關資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
主站蜘蛛池模板: uoco福利姬网站 | 日本人与黑人做爰视频网站 | 情缘1完整版在线观看 | 欧美一级乱妇老太婆特黄 | 91私密保健女子养生spa | 久久精品视频91 | 91国产高清 | 亚洲色图图 | 爽好大快深点一视频 | 国产综合欧美日韩视频一区 | 日本韩国无矿砖码 | 欧美一卡二卡科技有限公司 | 国产精品久久99 | 99在线观看免费视频 | 热伊人99re久久精品最新地 | 国产精品日本一区二区不卡视频 | 午夜成私人影院在线观看 | 久久精品视在线观看85 | 韩国禁片在线观看久 | 毛毛片在线 | 日韩亚洲国产激情在线观看 | 国产九九热视频 | 国产精品一区二区久久 | 99久久精品国产综合一区 | 亚洲国产99999在线精品一区 | 99rv精品视频在线播放 | 2018亚洲男人天堂 | 国产福利不卡一区二区三区 | 亚洲国产精品网站久久 | 236zz宅宅最新伦理 | 国产99视频精品免费视频7 | 91庥豆果冻天美精东蜜桃传媒 | 青青青手机在线视频 | 日本护士撒尿xxxxhd | 国产成人免费高清激情明星 | 荡娃艳妇有声小说 | 成年女人毛片免费观看中文w | 亚洲香蕉伊在人在线观婷婷 | 精品精品国产自在香蕉网 | 午夜无码片在线观看影院 | 国产91网站在线观看 |