RxSwift 中的 Subject 詳解 (翻譯二)

相關(guān)文章鏈接:

  1. RxSwift中的Observable
  2. RxSwift 上手詳解 —— 入門篇

Subject

Subject是一種橋梁和代理墙懂,在ReactiveX的一些實(shí)現(xiàn)中,它既可以當(dāng)作observer也可以當(dāng)做Observable祸轮。因?yàn)樗且粋€(gè)observer九榔,所以它可以訂閱一個(gè)或多個(gè)Observable哀峻,同時(shí)因?yàn)樗且粋€(gè)Observable,它可以傳遞它觀察到的事件哲泊,重新發(fā)送他們剩蟀,它也可以發(fā)送新的事件。

當(dāng)Subject訂閱一個(gè)Observable時(shí)切威,它可以觸發(fā)Observable發(fā)送事件(如果那是一個(gè)“cold” Observable育特,以為“cold” Observable會(huì)在被訂閱之后開始發(fā)送信息)。這一特點(diǎn)可以讓Subject成為一個(gè)“hot”O(jiān)bservable,這個(gè)“hot” Observable是一種原來“cold”O(jiān)bservable的變體缰冤。

有四種不同用途的的Subject犬缨,不是這四種Subject都會(huì)在ReactiveX的所有實(shí)現(xiàn)中出現(xiàn),不同的語言都會(huì)有自己的命名規(guī)范棉浸,會(huì)略有不同怀薛。

AsyncSubject


AsyncSubject只發(fā)送由源Observable發(fā)送的最后一個(gè)事件,并且只在源Observable完成之后迷郑。(如果源Observable沒有發(fā)送任何值枝恋,AsyncSubject也不會(huì)發(fā)送任何值。)


AsyncSubject會(huì)發(fā)送相同的值給所有observer嗡害。但是焚碌,如果源Observable被一個(gè)error中斷了發(fā)送,AsyncSubject不會(huì)發(fā)送任何事件霸妹,而是會(huì)發(fā)送從源Observable傳來的error提示十电。

BehaviorSubject


當(dāng)一個(gè)observer訂閱一個(gè)BehaviorSubject,它就開始發(fā)送最近由源Observable發(fā)送的事件(或者是還沒有被發(fā)送的種子值/默認(rèn)值)然后繼續(xù)發(fā)送從源Observable接收到的其他事件叹螟。



如果源Observable被一個(gè)error中斷鹃骂,那么BehaviorSubject不會(huì)發(fā)送事件給后續(xù)的observer,但會(huì)傳遞給他們error的信息首妖。

PublishSubject


PublishSubject僅僅發(fā)送在訂閱之后由源Observable發(fā)送的數(shù)據(jù)偎漫。

PublishSubject一旦被建立就會(huì)立刻開始發(fā)送事件(除非你采取一些方法去阻止它),這種機(jī)制有丟失事件的風(fēng)險(xiǎn)有缆,因?yàn)樵赟ubject被創(chuàng)建和被監(jiān)聽之間有一定的時(shí)間間隔象踊。如果你想保證所有的事件都可以被監(jiān)聽到的話,你有兩種方法棚壁。第一種是用Create方法(在發(fā)送之前檢查是否所有observer已經(jīng)訂閱好了)杯矩。第二種方法是你可以使用ReplaySubject。


如果源Observable被一個(gè)error中斷袖外,PublishSubject將不會(huì)發(fā)送任何事件給后續(xù)的observer史隆,但是它會(huì)傳遞error信息。

ReplaySubject


ReplaySubject發(fā)送源Observable的所有事件無論observer什么時(shí)候開始訂閱曼验。

也有一些版本的ReplaySubject會(huì)在緩存中的事件數(shù)達(dá)到一定的值時(shí)丟掉一些事件泌射,或者在某一個(gè)時(shí)間段之后丟掉一些緩存的事件。

如果把ReplaySubject當(dāng)做一個(gè)觀察者鬓照,注意不要從多個(gè)線程中調(diào)用onNext方法(或者其他on方法)熔酷,因?yàn)檫@樣的調(diào)用會(huì)導(dǎo)致非序列,ReplaySubject可能會(huì)弄不清楚哪個(gè)時(shí)間應(yīng)該首先被replay豺裆。

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拒秘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躺酒,老刑警劉巖押蚤,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異羹应,居然都是意外死亡揽碘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門量愧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钾菊,“玉大人帅矗,你說我怎么就攤上這事偎肃。” “怎么了浑此?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵累颂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我凛俱,道長(zhǎng)紊馏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任蒲犬,我火速辦了婚禮朱监,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘原叮。我一直安慰自己赫编,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布奋隶。 她就那樣靜靜地躺著擂送,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唯欣。 梳的紋絲不亂的頭發(fā)上嘹吨,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音境氢,去河邊找鬼蟀拷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛萍聊,可吹牛的內(nèi)容都是我干的问芬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脐区,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼愈诚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤炕柔,失蹤者是張志新(化名)和其女友劉穎酌泰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匕累,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陵刹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欢嘿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衰琐。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炼蹦,靈堂內(nèi)的尸體忽然破棺而出羡宙,到底是詐尸還是另有隱情,我是刑警寧澤掐隐,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布狗热,位于F島的核電站,受9級(jí)特大地震影響虑省,放射性物質(zhì)發(fā)生泄漏匿刮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一探颈、第九天 我趴在偏房一處隱蔽的房頂上張望熟丸。 院中可真熱鬧,春花似錦伪节、人聲如沸光羞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狞山。三九已至,卻和暖如春叉寂,著一層夾襖步出監(jiān)牢的瞬間萍启,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工屏鳍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勘纯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓钓瞭,卻偏偏與公主長(zhǎng)得像驳遵,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子山涡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容