RxSwift官方實(shí)例五(定位)

Subjects

所有行為都與此處描述的完全相同

Relays

RxRelay提供兩種Relays:PublishRelay和BehaviorRelay。它們的行為與并行Subjects相似,有兩處變化:

  • Relays永遠(yuǎn)不會(huì)完成躏筏。
  • Relays永遠(yuǎn)不會(huì)發(fā)出錯(cuò)誤侥钳。

本質(zhì)上,Relays只發(fā)出.next事件哲泊,永不終止剩蟀。

冷熱Observables

建議更多地將其視為序列的屬性而不是序列的類型,因?yàn)樗鼈兺耆蛇m合它們的相同抽象表示攻旦,Observable序列喻旷。

這是ReactiveX.io的定義

Observable何時(shí)開始序列元素?這取決于Observable牢屋∏以ぃ“熱”O(jiān)bservable可以在創(chuàng)建后立即開始發(fā)出元素,因此任何后來訂閱該Observable的觀察者都可以開始在中間某處觀察序列烙无。另一方面锋谐,“冷”O(jiān)bservable直到在觀察者訂閱它之前開始發(fā)射元素,因此這樣的觀察者保證從一開始就看到整個(gè)序列截酷。

熱Observables 冷Observables
......是序列 ......是序列
無論是否有任何觀察者訂閱涮拗,都要使用資源(“產(chǎn)生熱量”)。 在觀察者訂閱之前,不使用資源(不產(chǎn)生熱量)三热。
變量/屬性/常量鼓择,點(diǎn)擊坐標(biāo)系,鼠標(biāo)坐標(biāo)系就漾,UI控件值呐能,當(dāng)前時(shí)間 異步操作,HTTP連接抑堡,TCP連接摆出,流
通常包含~N個(gè)元素 通常包含~1個(gè)元素
無論是否有任何觀察者訂閱,都會(huì)產(chǎn)生序列元素首妖。 僅當(dāng)存在訂閱的觀察者時(shí)才生成序列元素偎漫。
序列計(jì)算資源通常在所有訂閱的觀察者之間共享。 通常為每個(gè)訂閱的觀察者分配序列計(jì)算資源有缆。
通常是有狀態(tài)的 通常無狀態(tài)的

Rx背后的數(shù)學(xué)

Observer和Iterator / Enumerator / Generator / Sequences之間的雙重性

觀察者模式和生成器模式之間存在雙重性象踊。這使能夠從異步回調(diào)的世界轉(zhuǎn)變到序列轉(zhuǎn)換的同步世界。

簡(jiǎn)而言之妒貌,枚舉器和觀察者模式都描述了序列通危。枚舉器定義序列的原因相當(dāng)簡(jiǎn)明,但觀察者稍微復(fù)雜一些灌曙。

然而菊碟,有一個(gè)非常簡(jiǎn)單的例子,不需要很多數(shù)學(xué)知識(shí)在刺。假設(shè)在給定時(shí)間觀察鼠標(biāo)光標(biāo)在屏幕上的位置逆害。隨著時(shí)間的推移,這些鼠標(biāo)位置形成序列蚣驼。實(shí)質(zhì)上魄幕,這是一個(gè)可觀察的序列。

可以通過兩種基本方式訪問序列的元素:

  • Push interface - 觀察者(觀察到的元素隨著時(shí)間推移產(chǎn)生一個(gè)序列)
  • Pull interface - 迭代器/枚舉器/生成器

還可以在此視頻中看到更正式的說明:

與其他框架比較

與ReactiveSwift比較

RxSwift有點(diǎn)類似于ReactiveSwift颖杏,因?yàn)镽eactiveSwift從Rx借用了大量概念纯陨。

該項(xiàng)目的主要目標(biāo)之一是創(chuàng)建一個(gè)更加簡(jiǎn)單的界面,使其與其他Rx實(shí)現(xiàn)更加一致留储,提供更豐富的并發(fā)模型翼抠,提供更多的優(yōu)化機(jī)制,并與內(nèi)置的Swift錯(cuò)誤處理機(jī)制更加一致获讳。

還決定僅依賴Swift / llvm編譯器阴颖,而不引入任何外部依賴項(xiàng)。

這些項(xiàng)目之間的主要區(qū)別可能在于其構(gòu)建抽象的方法丐膝。

RxSwift項(xiàng)目的主要目標(biāo)是提供以可觀察序列形式抽象的與環(huán)境無關(guān)的組合計(jì)算粘合劑量愧。

然后钾菊,我們旨在改善在特定平臺(tái)上使用RxSwift的體驗(yàn)。為此偎肃,RxCocoa使用通用計(jì)算來構(gòu)建更多實(shí)用的抽象并包裝Foundation / Cocoa / UKit框架煞烫。這意味著,其他庫(kù)使用上下文和通用計(jì)算引擎語義RxSwift提供了諸如Driver累颂,Signal红竭,ControlProperty,ControlEventS等等喘落。

將所有這些抽象表示為一個(gè)單獨(dú)的概念(observable sequences)的好處之一是,基于它們建立的所有計(jì)算的抽象也可以以相同的方式進(jìn)行組合最冰。它們都遵循相同的約定并實(shí)現(xiàn)相同的接口瘦棋。這也很容易建立靈活的subscription(資源)共享策略或使用一個(gè)內(nèi)置的:share,publish暖哨,multicast...

該庫(kù)還提供了fine-tunable并發(fā)模型赌朋。如果使用并發(fā)調(diào)度程序,則可觀察序列運(yùn)算符將保留序列屬性篇裁。相同的可觀察序列運(yùn)算符還知道如何發(fā)現(xiàn)和最佳地使用已知的串行調(diào)度程序沛慢。ReactiveSwift的并發(fā)模型更為有限,僅允許使用串行調(diào)度程序达布。

多線程編程確實(shí)非常困難团甲,而檢測(cè)不必要的等待循環(huán)則更加困難。這就是為什么所有操作符都以容錯(cuò)方式構(gòu)建的原因黍聂。即使在元素處理(遞歸)過程中發(fā)生元素生成躺苦,操作符也將嘗試處理這種情況并防止死鎖。這意味著在最壞的情況下产还,編程錯(cuò)誤將導(dǎo)致堆棧溢出匹厘,但用戶不必手動(dòng)終止該應(yīng)用程序,并且將在錯(cuò)誤報(bào)告系統(tǒng)中獲得崩潰報(bào)告脐区,以便查找并解決問題愈诚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牛隅,隨后出現(xiàn)的幾起案子炕柔,更是在濱河造成了極大的恐慌,老刑警劉巖倔叼,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汗唱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡丈攒,警方通過查閱死者的電腦和手機(jī)哩罪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門授霸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人际插,你說我怎么就攤上這事碘耳。” “怎么了框弛?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵辛辨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我瑟枫,道長(zhǎng)斗搞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任慷妙,我火速辦了婚禮僻焚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膝擂。我一直安慰自己虑啤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布架馋。 她就那樣靜靜地躺著狞山,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叉寂。 梳的紋絲不亂的頭發(fā)上萍启,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音屏鳍,去河邊找鬼伊约。 笑死,一個(gè)胖子當(dāng)著我的面吹牛孕蝉,可吹牛的內(nèi)容都是我干的屡律。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼降淮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼超埋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起佳鳖,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤霍殴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后系吩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體来庭,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年穿挨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了月弛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肴盏。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖帽衙,靈堂內(nèi)的尸體忽然破棺而出菜皂,到底是詐尸還是另有隱情,我是刑警寧澤厉萝,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布恍飘,位于F島的核電站,受9級(jí)特大地震影響谴垫,放射性物質(zhì)發(fā)生泄漏章母。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一翩剪、第九天 我趴在偏房一處隱蔽的房頂上張望胳施。 院中可真熱鬧,春花似錦肢专、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至筷登,卻和暖如春剃根,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背前方。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工狈醉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惠险。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓苗傅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親班巩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子渣慕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348