国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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
主站蜘蛛池模板: 亚洲在线中文字幕 | 国产精品久久国产精品 | 成人免费的视频 | 免费一区二区 | 极品久久 | 日韩精品免费一区二区三区 | 欧美成人一区二区 | 欧美一级欧美三级在线观看 | 欧美一区二区三区在线观看 | 欧美一区二区最爽乱淫视频免费看 | 国产一区二区三区在线视频 | 性网站在线观看 | av不卡在线播放 | 精品无人乱码一区二区三区 | 欧美视频三区 | 日本一区二区视频 | av亚洲在线 | 日韩精品视频在线播放 | 成年人黄色一级片 | 青青在线精品视频 | 日韩免费视频 | 亚洲日本国产 | 少妇看av一二三区 | 亚洲欧美成人综合 | 成人免费一区二区三区视频软件 | 日韩激情一区二区 | 亚洲精品久久久久中文字幕欢迎你 | 草草在线观看 | 一级爱 | 午夜小视频在线观看 | 91婷婷射| 日韩电影中文字幕 | 国产精品第一国产精品 | 超碰官网 | 欧美日韩电影一区二区 | 午夜精品久久久久久久男人的天堂 | 二区三区在线观看 | 久久久久久一区 | x99av成人免费 | 精品久久av | 国产精品久久久久久久 |