RxSwift學習基礎篇

MrMessyIP屬地: 江蘇
0.329字數 2,242

1.RxSwift初識

RxSwiftReactiveX 的swift版本,是一種函數式響應編程的框架。RxSwift遵循Functional Reactive Programming(FRP)的設計規范,其目的是通過類似于信號流或者觀察者的方式來實現代碼的邏輯運算,使代碼更加的簡潔、明了。

2.RxSwift觀察者模式

什么是觀察者模式?相信學習ios的都知道,在ios眾多的設計模式中有一種叫觀察者的設計模式(即KVO),其目的在于通過發送通知的方式來進行相應的操作。舉個例子:你在燒了一壺水,燒好了會聽到按鈕彈開的聲音,這時你會去把水灌到熱水瓶里。水壺就是被觀察者,你是觀察者,當水燒好了會給你發送按鈕彈開的事件,這時你接收到通知,去執行把水灌到熱水瓶里的操作。這就是RxSwift要告訴我們的觀察者模式。

3.RxSwift基礎知識

根據GitHub上下載的Rx.playground進行基礎知識的學習,由于是英文的版本,我對基礎知識進行了簡要的翻譯。項目地址:RxStudy

Observable和Observer

顧名思義,就是被觀察者和觀察者。Observable是被觀察者,Observer是觀察者。Observer(觀察者)訂閱(subscribe)Observable(被觀察者),觀察者就會受到被觀察者發出的通知事件。

subscribe

subscribe就是觀察者訂閱被觀察者的事件,比如next,error,completed事件。

DisposeBag

類似ios中的ARC,用于釋放RxSwift中資源,防止內存泄露。

never

創建一個永不終止并且永不發送任何事件的序列

empty

創建一個只發送.Completed事件的空序列

just

創建一個只包含一個元素的序列

of

創建一個包含固定數量的元素的序列

from

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

create

創建一個自定義的序列

range

創建一個可觀察的序列,該序列釋放一系列連續的整數,然后終止

repeatElement

創建一個可觀察的序列,無限地釋放給定的元素

generate

創建一個可觀察的序列,只要提供的條件計算為true,則發出相應的事件。

deferred

為每個訂閱者創建一個新的可觀察序列。

error

創建一個可觀察的序列,該序列不發出任何正常的事件,只發出error事件并結束。

doOn

為每個已發出的事件前調用一個副作用動作,并發出(通過)原始事件。

PublishSubject

在訂閱時間內向所有觀察者發送新事件。

ReplaySubject

發送新的事件給所有的觀察者,并指定先前事件緩存區的大小給新的觀察者。

BehaviorSubject

發送新的事件給所有的觀察者,并向新的觀察者發送最近的一個事件,沒有則發送默認值。

Variable

BehaviorSubject的進一步封裝,所以會發送最近的事件給新的訂閱者。但不會收到 .Completed 和 .Error 這類的終結事件,它會主動在析構的時候發送 .Complete。

startWith

在從被觀察者發送事件開始之前,先發送指定的元素序列。

merge

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

zip

將兩個可觀察序列按照順序組合在一起,形成一個新的可觀察序列,并一一對應。

combineLatest

如果存在最多不超過8條的事件序列,需要同時監聽,那么每當有新的事件發生的時候,combineLatest 會將每個序列的最新的一個元素進行合并。

switchLatest

將可觀察序列發出的事件轉換成可觀察的序列,并從最近的可觀察序列中發送事件。

map

對每個元素都用函數做一次轉換,挨個映射一遍。

flatMap and flatMapLatest

將可觀察序列發射的元素轉化為可觀測序列,并將兩個觀察到的序列合并為一個可觀察序列。這是有用的,例如,當你有一個可觀察的序列,它本身發射的是可觀察的序列,并且你希望能夠從一個可觀察的序列的新的事件作出反應。flatmap和flatmaplatest之間的區別是,flatmaplatest只會從最近的可觀察序列內發射元素。

scan

有點像 reduce ,它會把每次的運算結果累積起來,作為下一次運算的輸入值。

filter

只會讓符合條件的元素通過。

distinctUntilChanged

抑制可觀察序列發出的連續重復元素。

elementAt

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

single

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

take

從可觀察序列的開始僅釋放指定數量的元素。

takeLast

僅從可觀察序列的結束處釋放指定數量的元素。

takeWhile

只要指定的條件計算為true,從可觀察序列的開始發出元素。

takeUntil

接收事件消息,直到另一個可觀察序列發出事件消息的時候。

skip

禁止從可觀察序列的開始發射指定數量的元素。

skipWhile

抑制從符合指定條件的可觀察序列的開始發射元素。

skipWhileWithIndex

抑制從符合指定條件的可觀察序列的開始發射元素,并釋放剩余元素。閉包也傳遞了每個元素的索引。

skipUntil

直到某個可觀察序列發出了事件消息,才開始接收當前序列發出的事件消息。

toArray

將可觀察的序列轉換為數組,將該數組作為新的元素通過可觀察序列發出,然后終止。

reduce

從初始值開始,然后將累加器閉包應用于可觀察序列發出的所有元素,并將聚合結果返回為單個元素可觀察序列。

concat

concat會把多個序列和并為一個序列,并且當前面一個序列發出了completed事件,才會開始下一個序列的事件。

publish

將一個正常的序列轉換成一個連接性的序列。

replay

將一個正常的序列轉換成一個連接性的序列,然后和replaySubject相似,能接收到訂閱之前的事件消息。

multicast

將一個正常的序列轉換成一個連接性的序列,并且通過特性的subject發送出去,比如PublishSubject,或者replaySubject,behaviorSubject等。不同的Subject會有不同的結果。

catchErrorJustReturn

通過返回一個可觀察到的序列,然后返回一個元素,然后終止。

catchError

可以捕獲異常事件,并且在后面無縫接上另一段事件序列,絲毫沒有異常的痕跡。

retry

顧名思義,就是在出現異常的時候會再去從頭訂閱事件序列,妄圖通過『從頭再來』解決異常,無限制。

retry maxAttemptCount

顧名思義,就是在出現異常的時候會再去從頭訂閱事件序列,妄圖通過『從頭再來』解決異常,設置最大值來限制重新訂閱事件的次數。

debug

打印出所有訂閱,事件和disposals。

RxSwift.Resources.total

查看RxSwift所有資源的占用,這對于在開發過程中的泄漏檢測是有用的。

4.總結

以上是對RxSwift基礎知識的學習和理解,雖然未應用到實際的項目中,但也是略有感悟。RxSwift是適合使用swift開發者使用的一套框架,如果你使用oc語言,可以參考ReactiveCocoa,ReactiveCocoa是以信號流的方式向我們闡述函數式響應框架的思維模式,當然ReactiveCocoa也有swift版本的,即ReactiveSwift。但我認為RxSwift更為適合,因為ReactiveX還包含了像RxJava,Rxjs等其他語言的版本,熟練掌握了其中的一種,在去學習其他的你會覺得似成相識的感覺。如果你致力于成為全棧型工程師,RxSwift將非常的適合你。

最后編輯于
©著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
11人點贊
MrMessyios開發者,js全棧技術員。
總資產1共写了7438字获得24个赞共12个粉丝
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 最近在學習RxSwift相關的內容,在這里記錄一些基本的知識點,以便今后查閱。 Observable 在RxSwi...
    L_Zephyr閱讀 1,769評論 1 4
  • 原創 2017-06-13 RxSwift 這個框架RP框架相信你應該不陌生了,在Objective-C中我們使用...
    一根聰閱讀 6,265評論 4 14
  • 發現 關注 消息 RxSwift入坑解讀-你所需要知道的各種概念 沸沸騰關注 2016.11.27 19:11*字...
    楓葉1234閱讀 2,815評論 0 2
  • 前言 在之前用Objective-C語言做項目的時候,我習慣性的會利用MVVM模式去架構項目,在框架Reactiv...
    Tangentw閱讀 21,207評論 32 123
  • 感謝組長強尼每天督促我們學習分享。謝謝,謝謝,謝謝! 感謝同事們幫我完成設計工作,當我做項目工作的時候,沒有后顧之...
    止咳的雪梨閱讀 124評論 0 0