最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RxSwift發(fā)送及訂閱 Subjects、Variables代碼示例

 更新時(shí)間:2020年12月04日 09:50:03   作者:芬達(dá)  
這篇文章主要介紹了RxSwift發(fā)送及訂閱 Subjects、Variables代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Subjects 介紹

1. Subjects 是訂閱者,也是Observable

訂閱者:它能動(dòng)態(tài)的接收新的值。

Observable: 當(dāng)Subjects有了新值后會(huì)通過(guò)Event將新值發(fā)出給他的所有訂閱者。

2. 常用的方法

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

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

相同點(diǎn)

  • 都是Observable,他們的訂閱者都能接收他們發(fā)出的新的Event
  • 直到 Subject 發(fā)出 .complete 或者 .error 的 Event 后,該 Subject 便終結(jié)了,同時(shí)它也就不會(huì)再發(fā)出.next事件。
  • 對(duì)于那些在Subject 終結(jié)后再訂閱他的訂閱者,也能收到 subject發(fā)出的一條.complete 或.error的event,告訴這個(gè)新的訂閱者它已經(jīng)終結(jié)了。

不同點(diǎn)

  • PublishSubject
  • 最普通的Subject,不需要初始值就能初始化。
  • 他的訂閱者只能收到他們訂閱后的 Event。
let sub = PublishSubject<String>()

sub.onNext("訂閱之前的不能接收到")

sub.subscribe { event in
  print(event.element)
//Optional("訂閱之后的可以接收到")
//nil
}.disposed(by: disposeBag)

sub.onNext("訂閱之后的可以接收到")
//結(jié)束
sub.onCompleted()
/// 結(jié)束之后添加的訂閱能收到 completed
sub.subscribe { event in
  print(event)
}
sub.onNext("結(jié)束后發(fā)的都收不到")

BehaviorSubject

需要一個(gè)默認(rèn)值初始化

當(dāng)一個(gè)訂閱者訂閱之后會(huì)立馬收到上一個(gè)Event,之后就是正常情況發(fā)一個(gè)收一個(gè)。

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

let sub = BehaviorSubject(value: "默認(rèn)值")

sub.subscribe { event in
  print("訂閱1", event)
}.disposed(by: disposeBag)
sub.onNext("發(fā)送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(默認(rèn)值)
訂閱1 next(發(fā)送1)
訂閱2 next(發(fā)送1)
訂閱1 completed
訂閱2 completed
訂閱3 completed

ReplaySubject

創(chuàng)建的時(shí)候需要一個(gè)參數(shù)bufferSize設(shè)置記錄個(gè)數(shù)

新添加的訂閱會(huì)接收到之前發(fā)送的兩個(gè) Event,如果不足兩個(gè)就只接收一個(gè)。

如果超過(guò)兩個(gè)只接收最新的兩個(gè)。

如果訂閱時(shí)已經(jīng)結(jié)束除了會(huì)接收到最新的兩個(gè)Event外還有結(jié)束的complete或error。

let sub = ReplaySubject<String>.create(bufferSize: 2)

sub.subscribe { event in
  print("訂閱1", event)
}.disposed(by: disposeBag)
sub.onNext("發(fā)送1")
print("-------")
sub.subscribe { event in
  print("訂閱2", event)
}.disposed(by: disposeBag)

sub.onNext("發(fā)送2")
sub.onNext("發(fā)送3")
sub.onNext("發(fā)送4")
print("-------")
sub.subscribe { event in
  print("訂閱3", event)
}.disposed(by: disposeBag)
sub.onCompleted()
print("-------")
/// 不僅會(huì)收到最后的兩個(gè) event 還有 Completed
sub.subscribe { event in
  print("訂閱4", event)
}

訂閱1 next(發(fā)送1)
-------
訂閱2 next(發(fā)送1)
訂閱1 next(發(fā)送2)
訂閱2 next(發(fā)送2)
訂閱1 next(發(fā)送3)
訂閱2 next(發(fā)送3)
訂閱1 next(發(fā)送4)
訂閱2 next(發(fā)送4)
-------
訂閱3 next(發(fā)送3)
訂閱3 next(發(fā)送4)
訂閱1 completed
訂閱2 completed
訂閱3 completed
-------
訂閱4 next(發(fā)送3)
訂閱4 next(發(fā)送4)
訂閱4 completed

BehaviorRelay

基本同 BehaviorSubject功能一樣,但是不能主動(dòng)調(diào)用onCompleted和error,會(huì)在BehaviorRelay釋放前調(diào)用

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)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Swift3遷移至Swift4可能遇到的問(wèn)題小結(jié)

    Swift3遷移至Swift4可能遇到的問(wèn)題小結(jié)

    每當(dāng)看到新的編程語(yǔ)言我總是會(huì)有相當(dāng)大的興趣,所以下面這篇文章主要給大家介紹了關(guān)于Swift3遷移至Swift4可能遇到的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • RxSwift發(fā)送及訂閱 Subjects、Variables代碼示例

    RxSwift發(fā)送及訂閱 Subjects、Variables代碼示例

    這篇文章主要介紹了RxSwift發(fā)送及訂閱 Subjects、Variables代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Swift版使用ThPullRefresh實(shí)現(xiàn)下拉上拉刷新數(shù)據(jù)

    Swift版使用ThPullRefresh實(shí)現(xiàn)下拉上拉刷新數(shù)據(jù)

    這篇文章主要介紹了Swift版使用ThPullRefresh實(shí)現(xiàn)下拉上拉刷新數(shù)據(jù),需要的朋友可以參考下
    2016-01-01
  • swift中AnyObject和Any的介紹與區(qū)別詳解

    swift中AnyObject和Any的介紹與區(qū)別詳解

    雖然使用swift開(kāi)發(fā)了一段時(shí)間,但是感覺(jué)對(duì)一些基礎(chǔ)的東西了解不是比較透徹,在查詢了許多資料以后還是打算自己動(dòng)手記錄一下,下面這篇文章主要給大家介紹了關(guān)于swift中AnyObject和Any的介紹與區(qū)別的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • Swift語(yǔ)言中字符串相關(guān)的基本概念解析

    Swift語(yǔ)言中字符串相關(guān)的基本概念解析

    這篇文章主要介紹了Swift語(yǔ)言中字符串相關(guān)的基本概念解析,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Swift無(wú)限循環(huán)控件開(kāi)發(fā)

    Swift無(wú)限循環(huán)控件開(kāi)發(fā)

    這篇文章主要為大家詳細(xì)介紹了Swift無(wú)限循環(huán)控件開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Swift源碼解析之弱引用

    Swift源碼解析之弱引用

    這篇文章主要給大家介紹了關(guān)于Swift源碼解析之弱引用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Swift快速集成下拉刷新和上拉加載更多示例代碼

    Swift快速集成下拉刷新和上拉加載更多示例代碼

    這篇文章主要介紹了Swift快速集成下拉刷新和上拉加載更多示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Swift中的訪問(wèn)控制和protected

    Swift中的訪問(wèn)控制和protected

    這篇文章主要介紹了Swift中的訪問(wèn)控制和protected,本文主要講解為什么Swift沒(méi)有類似protected的選項(xiàng),需要的朋友可以參考下
    2015-05-05
  • Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記

    Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記

    這篇文章主要介紹了Swift中Optional值的鏈?zhǔn)秸{(diào)用學(xué)習(xí)筆記,Optional鏈?zhǔn)荢wift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-07-07

最新評(píng)論

宝兴县| 兴安盟| 潜山县| 赞皇县| 巢湖市| 普宁市| 林西县| 苏尼特左旗| 涞水县| 当阳市| 封丘县| 贵阳市| 葵青区| 陇川县| 南充市| 定陶县| 天峨县| 日照市| 临邑县| 东城区| 淅川县| 信丰县| 古浪县| 桂林市| 石狮市| 庆阳市| 宁远县| 朝阳县| 靖西县| 富川| 宜黄县| 视频| 鄱阳县| 南部县| 天水市| 成武县| 蓬溪县| 永昌县| 尚义县| 安新县| 辽源市|