欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)便寫(xiě)法。該方法相當(dāng)于 subject 接收到一個(gè).next 事件。
  • onError(:):是on(.error(:))的簡(jiǎn)便寫(xiě)法。該方法相當(dāng)于 subject 接收到一個(gè).error 事件。
  • onCompleted():是 on(.completed)的簡(jiǎn)便寫(xiě)法。該方法相當(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)文章

  • Swift中static和class關(guān)鍵字的深入講解

    Swift中static和class關(guān)鍵字的深入講解

    這篇文章主要給大家介紹了關(guān)于Swift中static和class關(guān)鍵字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Swift開(kāi)發(fā)中switch語(yǔ)句值綁定模式

    Swift開(kāi)發(fā)中switch語(yǔ)句值綁定模式

    本文給大家分享Swift開(kāi)發(fā)中switch語(yǔ)句值綁定模式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下
    2016-12-12
  • Swift中使用可選類(lèi)型完美解決占位問(wèn)題

    Swift中使用可選類(lèi)型完美解決占位問(wèn)題

    這篇文章主要介紹了Swift中使用可選類(lèi)型完美解決占位問(wèn)題,本文講解了為Dictionary增加objectsForKeys函數(shù)、Swift中更簡(jiǎn)便的方法、內(nèi)嵌可選類(lèi)型等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Swift實(shí)現(xiàn)Selection Sort選擇排序算法的實(shí)例講解

    Swift實(shí)現(xiàn)Selection Sort選擇排序算法的實(shí)例講解

    選擇排序是一種穩(wěn)定的排序算法,且實(shí)現(xiàn)代碼通常比冒泡排序要來(lái)的簡(jiǎn)單,這里我們就來(lái)看一下Swift實(shí)現(xiàn)Selection Sort選擇排序的實(shí)例講解
    2016-07-07
  • 利用Swift如何計(jì)算文本的size示例詳解

    利用Swift如何計(jì)算文本的size示例詳解

    這篇文章主要給大家介紹了關(guān)于利用Swift如何計(jì)算文本的size的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們的工作或者學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Swift 如何讓ScrollView滾動(dòng)到具體某個(gè)位置

    Swift 如何讓ScrollView滾動(dòng)到具體某個(gè)位置

    這篇文章主要介紹了Swift 如何讓ScrollView滾動(dòng)到具體某個(gè)位置,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 深入理解Swift中的變量與常量

    深入理解Swift中的變量與常量

    本文主要是介紹Swift中最常用的常量和變量,將從“變量常量的定義”、"如何聲明變量常量"、“變量和常量的命名”,"變量常量的本質(zhì)區(qū)別"四個(gè)方面入手,重點(diǎn)介紹變量和常量的使用以及區(qū)別,希望大家在閱讀完本文后都可以熟練使用它們。有需要的朋友們下面來(lái)一起學(xué)習(xí)吧。
    2017-01-01
  • Swift 4.0中如何引用3.0的第三方庫(kù)

    Swift 4.0中如何引用3.0的第三方庫(kù)

    這篇文章主要給大家介紹了關(guān)于在Swift 4.0中如何引用3.0第三方庫(kù)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Swift中循環(huán)語(yǔ)句中的轉(zhuǎn)移語(yǔ)句 break 和 continue

    Swift中循環(huán)語(yǔ)句中的轉(zhuǎn)移語(yǔ)句 break 和 continue

    這篇文章主要介紹了Swift中循環(huán)語(yǔ)句中的轉(zhuǎn)移語(yǔ)句 break 和 continue,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的的朋友參考下
    2016-12-12
  • Swift教程之閉包詳解

    Swift教程之閉包詳解

    這篇文章主要介紹了Swift教程之閉包詳解,閉包可以在上下文的范圍內(nèi)捕獲、存儲(chǔ)任何被定義的常量和變量引用,因這些常量和變量的封閉性,而命名為“閉包(Closures)”,需要的朋友可以參考下
    2015-01-01

最新評(píng)論