RxSwift學(xué)習(xí)基礎(chǔ)篇

1.RxSwift初識(shí)

RxSwiftReactiveX 的swift版本斗搞,是一種函數(shù)式響應(yīng)編程的框架逐虚。RxSwift遵循Functional Reactive Programming(FRP)的設(shè)計(jì)規(guī)范垄琐,其目的是通過(guò)類似于信號(hào)流或者觀察者的方式來(lái)實(shí)現(xiàn)代碼的邏輯運(yùn)算勾给,使代碼更加的簡(jiǎn)潔、明了蔗坯。

2.RxSwift觀察者模式

什么是觀察者模式砰奕?相信學(xué)習(xí)ios的都知道蛛芥,在ios眾多的設(shè)計(jì)模式中有一種叫觀察者的設(shè)計(jì)模式(即KVO),其目的在于通過(guò)發(fā)送通知的方式來(lái)進(jìn)行相應(yīng)的操作军援。舉個(gè)例子:你在燒了一壺水仅淑,燒好了會(huì)聽到按鈕彈開的聲音,這時(shí)你會(huì)去把水灌到熱水瓶里胸哥。水壺就是被觀察者涯竟,你是觀察者,當(dāng)水燒好了會(huì)給你發(fā)送按鈕彈開的事件空厌,這時(shí)你接收到通知庐船,去執(zhí)行把水灌到熱水瓶里的操作。這就是RxSwift要告訴我們的觀察者模式嘲更。

3.RxSwift基礎(chǔ)知識(shí)

根據(jù)GitHub上下載的Rx.playground進(jìn)行基礎(chǔ)知識(shí)的學(xué)習(xí)筐钟,由于是英文的版本,我對(duì)基礎(chǔ)知識(shí)進(jìn)行了簡(jiǎn)要的翻譯赋朦。項(xiàng)目地址:RxStudy

Observable和Observer

顧名思義篓冲,就是被觀察者和觀察者。Observable是被觀察者宠哄,Observer是觀察者壹将。Observer(觀察者)訂閱(subscribe)Observable(被觀察者),觀察者就會(huì)受到被觀察者發(fā)出的通知事件毛嫉。

subscribe

subscribe就是觀察者訂閱被觀察者的事件诽俯,比如next,error承粤,completed事件惊畏。

DisposeBag

類似ios中的ARC,用于釋放RxSwift中資源密任,防止內(nèi)存泄露。

never

創(chuàng)建一個(gè)永不終止并且永不發(fā)送任何事件的序列

empty

創(chuàng)建一個(gè)只發(fā)送.Completed事件的空序列

just

創(chuàng)建一個(gè)只包含一個(gè)元素的序列

of

創(chuàng)建一個(gè)包含固定數(shù)量的元素的序列

from

創(chuàng)建一個(gè)SequenceType類型元素的序列(例如:Array, Dictionary, Set)

create

創(chuàng)建一個(gè)自定義的序列

range

創(chuàng)建一個(gè)可觀察的序列偷俭,該序列釋放一系列連續(xù)的整數(shù)浪讳,然后終止

repeatElement

創(chuàng)建一個(gè)可觀察的序列,無(wú)限地釋放給定的元素

generate

創(chuàng)建一個(gè)可觀察的序列涌萤,只要提供的條件計(jì)算為true淹遵,則發(fā)出相應(yīng)的事件口猜。

deferred

為每個(gè)訂閱者創(chuàng)建一個(gè)新的可觀察序列。

error

創(chuàng)建一個(gè)可觀察的序列透揣,該序列不發(fā)出任何正常的事件济炎,只發(fā)出error事件并結(jié)束。

doOn

為每個(gè)已發(fā)出的事件前調(diào)用一個(gè)副作用動(dòng)作辐真,并發(fā)出(通過(guò))原始事件须尚。

PublishSubject

在訂閱時(shí)間內(nèi)向所有觀察者發(fā)送新事件。

ReplaySubject

發(fā)送新的事件給所有的觀察者侍咱,并指定先前事件緩存區(qū)的大小給新的觀察者耐床。

BehaviorSubject

發(fā)送新的事件給所有的觀察者,并向新的觀察者發(fā)送最近的一個(gè)事件楔脯,沒(méi)有則發(fā)送默認(rèn)值撩轰。

Variable

BehaviorSubject的進(jìn)一步封裝,所以會(huì)發(fā)送最近的事件給新的訂閱者昧廷。但不會(huì)收到 .Completed 和 .Error 這類的終結(jié)事件堪嫂,它會(huì)主動(dòng)在析構(gòu)的時(shí)候發(fā)送 .Complete。

startWith

在從被觀察者發(fā)送事件開始之前木柬,先發(fā)送指定的元素序列皆串。

merge

將兩個(gè)可觀察序列按照順序組合在一起,形成一個(gè)新的可觀察序列。

zip

將兩個(gè)可觀察序列按照順序組合在一起,形成一個(gè)新的可觀察序列,并一一對(duì)應(yīng)弄诲。

combineLatest

如果存在最多不超過(guò)8條的事件序列愚战,需要同時(shí)監(jiān)聽,那么每當(dāng)有新的事件發(fā)生的時(shí)候齐遵,combineLatest 會(huì)將每個(gè)序列的最新的一個(gè)元素進(jìn)行合并寂玲。

switchLatest

將可觀察序列發(fā)出的事件轉(zhuǎn)換成可觀察的序列,并從最近的可觀察序列中發(fā)送事件梗摇。

map

對(duì)每個(gè)元素都用函數(shù)做一次轉(zhuǎn)換拓哟,挨個(gè)映射一遍。

flatMap and flatMapLatest

將可觀察序列發(fā)射的元素轉(zhuǎn)化為可觀測(cè)序列伶授,并將兩個(gè)觀察到的序列合并為一個(gè)可觀察序列断序。這是有用的,例如糜烹,當(dāng)你有一個(gè)可觀察的序列违诗,它本身發(fā)射的是可觀察的序列,并且你希望能夠從一個(gè)可觀察的序列的新的事件作出反應(yīng)疮蹦。flatmap和flatmaplatest之間的區(qū)別是诸迟,flatmaplatest只會(huì)從最近的可觀察序列內(nèi)發(fā)射元素。

scan

有點(diǎn)像 reduce ,它會(huì)把每次的運(yùn)算結(jié)果累積起來(lái)阵苇,作為下一次運(yùn)算的輸入值壁公。

filter

只會(huì)讓符合條件的元素通過(guò)。

distinctUntilChanged

抑制可觀察序列發(fā)出的連續(xù)重復(fù)元素绅项。

elementAt

只處理在指定位置的事件紊册。

single

僅由可觀察序列發(fā)出的第一個(gè)元素(或滿足條件的第一個(gè)元素)。如果觀察到的序列發(fā)射是不符合條件的一個(gè)元素,則會(huì)拋出一個(gè)錯(cuò)誤。

take

從可觀察序列的開始僅釋放指定數(shù)量的元素忿峻。

takeLast

僅從可觀察序列的結(jié)束處釋放指定數(shù)量的元素。

takeWhile

只要指定的條件計(jì)算為true关斜,從可觀察序列的開始發(fā)出元素。

takeUntil

接收事件消息铺浇,直到另一個(gè)可觀察序列發(fā)出事件消息的時(shí)候痢畜。

skip

禁止從可觀察序列的開始發(fā)射指定數(shù)量的元素。

skipWhile

抑制從符合指定條件的可觀察序列的開始發(fā)射元素鳍侣。

skipWhileWithIndex

抑制從符合指定條件的可觀察序列的開始發(fā)射元素丁稀,并釋放剩余元素。閉包也傳遞了每個(gè)元素的索引倚聚。

skipUntil

直到某個(gè)可觀察序列發(fā)出了事件消息线衫,才開始接收當(dāng)前序列發(fā)出的事件消息。

toArray

將可觀察的序列轉(zhuǎn)換為數(shù)組惑折,將該數(shù)組作為新的元素通過(guò)可觀察序列發(fā)出授账,然后終止。

reduce

從初始值開始惨驶,然后將累加器閉包應(yīng)用于可觀察序列發(fā)出的所有元素白热,并將聚合結(jié)果返回為單個(gè)元素可觀察序列。

concat

concat會(huì)把多個(gè)序列和并為一個(gè)序列粗卜,并且當(dāng)前面一個(gè)序列發(fā)出了completed事件屋确,才會(huì)開始下一個(gè)序列的事件。

publish

將一個(gè)正常的序列轉(zhuǎn)換成一個(gè)連接性的序列续扔。

replay

將一個(gè)正常的序列轉(zhuǎn)換成一個(gè)連接性的序列攻臀,然后和replaySubject相似,能接收到訂閱之前的事件消息纱昧。

multicast

將一個(gè)正常的序列轉(zhuǎn)換成一個(gè)連接性的序列刨啸,并且通過(guò)特性的subject發(fā)送出去,比如PublishSubject识脆,或者replaySubject设联,behaviorSubject等加匈。不同的Subject會(huì)有不同的結(jié)果。

catchErrorJustReturn

通過(guò)返回一個(gè)可觀察到的序列仑荐,然后返回一個(gè)元素,然后終止纵东。

catchError

可以捕獲異常事件粘招,并且在后面無(wú)縫接上另一段事件序列,絲毫沒(méi)有異常的痕跡偎球。

retry

顧名思義洒扎,就是在出現(xiàn)異常的時(shí)候會(huì)再去從頭訂閱事件序列,妄圖通過(guò)『從頭再來(lái)』解決異常衰絮,無(wú)限制袍冷。

retry maxAttemptCount

顧名思義,就是在出現(xiàn)異常的時(shí)候會(huì)再去從頭訂閱事件序列猫牡,妄圖通過(guò)『從頭再來(lái)』解決異常胡诗,設(shè)置最大值來(lái)限制重新訂閱事件的次數(shù)。

debug

打印出所有訂閱淌友,事件和disposals煌恢。

RxSwift.Resources.total

查看RxSwift所有資源的占用,這對(duì)于在開發(fā)過(guò)程中的泄漏檢測(cè)是有用的震庭。

4.總結(jié)

以上是對(duì)RxSwift基礎(chǔ)知識(shí)的學(xué)習(xí)和理解瑰抵,雖然未應(yīng)用到實(shí)際的項(xiàng)目中,但也是略有感悟器联。RxSwift是適合使用swift開發(fā)者使用的一套框架二汛,如果你使用oc語(yǔ)言,可以參考ReactiveCocoa拨拓,ReactiveCocoa是以信號(hào)流的方式向我們闡述函數(shù)式響應(yīng)框架的思維模式肴颊,當(dāng)然ReactiveCocoa也有swift版本的,即ReactiveSwift千元。但我認(rèn)為RxSwift更為適合苫昌,因?yàn)镽eactiveX還包含了像RxJava,Rxjs等其他語(yǔ)言的版本,熟練掌握了其中的一種幸海,在去學(xué)習(xí)其他的你會(huì)覺(jué)得似成相識(shí)的感覺(jué)祟身。如果你致力于成為全棧型工程師,RxSwift將非常的適合你物独。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袜硫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挡篓,更是在濱河造成了極大的恐慌婉陷,老刑警劉巖帚称,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秽澳,居然都是意外死亡闯睹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門担神,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)楼吃,“玉大人,你說(shuō)我怎么就攤上這事妄讯『⑽” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵亥贸,是天一觀的道長(zhǎng)躬窜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)炕置,這世上最難降的妖魔是什么荣挨? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮讹俊,結(jié)果婚禮上垦沉,老公的妹妹穿的比我還像新娘。我一直安慰自己仍劈,他們只是感情好厕倍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贩疙,像睡著了一般讹弯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上这溅,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天组民,我揣著相機(jī)與錄音,去河邊找鬼悲靴。 笑死臭胜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的癞尚。 我是一名探鬼主播耸三,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浇揩!你這毒婦竟也來(lái)了仪壮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胳徽,失蹤者是張志新(化名)和其女友劉穎积锅,沒(méi)想到半個(gè)月后爽彤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缚陷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年适篙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箫爷。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匙瘪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝶缀,到底是詐尸還是另有隱情,我是刑警寧澤薄货,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布翁都,位于F島的核電站,受9級(jí)特大地震影響谅猾,放射性物質(zhì)發(fā)生泄漏柄慰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一税娜、第九天 我趴在偏房一處隱蔽的房頂上張望坐搔。 院中可真熱鬧,春花似錦敬矩、人聲如沸概行。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凳忙。三九已至,卻和暖如春禽炬,著一層夾襖步出監(jiān)牢的瞬間涧卵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工腹尖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柳恐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓热幔,卻偏偏與公主長(zhǎng)得像乐设,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子断凶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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

  • 最近在學(xué)習(xí)RxSwift相關(guān)的內(nèi)容伤提,在這里記錄一些基本的知識(shí)點(diǎn),以便今后查閱认烁。 Observable 在RxSwi...
    L_Zephyr閱讀 1,752評(píng)論 1 4
  • 原創(chuàng) 2017-06-13 RxSwift 這個(gè)框架RP框架相信你應(yīng)該不陌生了肿男,在Objective-C中我們使用...
    一根聰閱讀 6,242評(píng)論 4 14
  • 發(fā)現(xiàn) 關(guān)注 消息 RxSwift入坑解讀-你所需要知道的各種概念 沸沸騰關(guān)注 2016.11.27 19:11*字...
    楓葉1234閱讀 2,795評(píng)論 0 2
  • 前言 在之前用Objective-C語(yǔ)言做項(xiàng)目的時(shí)候介汹,我習(xí)慣性的會(huì)利用MVVM模式去架構(gòu)項(xiàng)目,在框架Reactiv...
    Tangentw閱讀 21,188評(píng)論 32 123
  • 感謝組長(zhǎng)強(qiáng)尼每天督促我們學(xué)習(xí)分享舶沛。謝謝嘹承,謝謝,謝謝如庭! 感謝同事們幫我完成設(shè)計(jì)工作叹卷,當(dāng)我做項(xiàng)目工作的時(shí)候,沒(méi)有后顧之...
    止咳的雪梨閱讀 120評(píng)論 0 0