RxSwift 為什么學(xué)習(xí)RxSwift

RxSwift掃盲

作為iOS開發(fā)者,或許你沒聽說(shuō)過(guò)RxSwift,但是一定聽說(shuō)過(guò)函數(shù)式編程[Functional Programming]、響應(yīng)式編程[Reactive Programming]、函數(shù)響應(yīng)式編程[Functional Reactive Programming];

見名知意,RxSwift 是在 Apple 推出 Swift 后,針對(duì) Swift 語(yǔ)言 ReactiveX 推出 Reactive Extensions 系列一個(gè)實(shí)現(xiàn)庫(kù);除此之外,ReactiveX 還推出了 RxJava,RxAndroid,RxPHP 等蘊(yùn)含類似思想的框架。

為什么要學(xué)習(xí)RxSwift?

我們知道 C 語(yǔ)言的面向過(guò)程,Objective-C、C++ 面向?qū)ο缶幊? Java 的 Spring 框架提出了面向切面編程的思想,學(xué)習(xí) RxSwift 不是學(xué)習(xí)如何使用第三方庫(kù),而是學(xué)習(xí)一種編程思想--函數(shù)響應(yīng)式編程;

Why use RxSwift?

A vast majority of the code we write involves responding to external events. When a user manipulates a control, we need to write an @IBAction handler to respond. We need to observe notifications to detect when the keyboard changes position. We must provide closures to execute when URL sessions respond with data. And we use KVO to detect changes to variables. All of these various systems makes our code needlessly complex. Wouldn't it be better if there was one consistent system that handled all of our call/response code? Rx is such a system.
RxSwift is the official implementation of Reactive Extensions (aka Rx), which exist for most major languages and platforms.

翻譯:

我們編寫的絕大多數(shù)代碼涉及對(duì)外部事件的響應(yīng)。當(dāng)一個(gè)用戶操作控制,我們需要寫一個(gè)@IBAction處理器響應(yīng)。當(dāng)鍵盤改變位置時(shí),我們需要觀察通知來(lái)檢測(cè)。當(dāng)URL會(huì)話響應(yīng)數(shù)據(jù)時(shí),必須提供閉包來(lái)執(zhí)行。我們使用KVO的變化來(lái)檢測(cè)變量。所有這些不同的系統(tǒng)使我們的代碼不必要的復(fù)雜。如果有一個(gè)一致的系統(tǒng)處理我們所有的呼叫/響應(yīng)代碼,這不是更好嗎?Rx就是這樣一個(gè)系統(tǒng)。
RxSwift是官方實(shí)現(xiàn)的Reactive擴(kuò)展正(又名Rx),存在的最主要的語(yǔ)言和平臺(tái)。

why use RxSwift?
視頻講解RxSwift使用 RxSwift 進(jìn)行響應(yīng)式編程

RxSwift的優(yōu)點(diǎn)

  • Composable 可組合,在設(shè)計(jì)模式中有一種模式叫做組合模式,你可以方便的用不同的組合實(shí)現(xiàn)不同的類
  • Reusable 代碼可重用,原因很簡(jiǎn)單,對(duì)應(yīng)RxSwift,就是一堆Obserable
  • Declarative 響應(yīng)式的,因?yàn)闋顟B(tài)不可變,只有數(shù)據(jù)變化
  • Understandable and concise 簡(jiǎn)潔,容易理解。
  • Stable 穩(wěn)定,因?yàn)镽xSwift寫出的代碼,單元測(cè)試時(shí)分方便
  • Less stateful “無(wú)”狀態(tài)性,因?yàn)閷?duì)于響應(yīng)式編程,你的應(yīng)用程序就是一堆數(shù)據(jù)流
  • Without leaks 沒有泄漏,因?yàn)橘Y源管理非常簡(jiǎn)單

GitHub約一萬(wàn)個(gè)Star


screen.png

響應(yīng)式編程:ReactiveCocoa vs RxSwift 選誰(shuí)好?

RAC是一個(gè)已經(jīng)有著3年歷史的項(xiàng)目,從Objective-C時(shí)期開始,后來(lái)從3.0開始支持了swift(可以通過(guò)bridge在OC下使用),接著就完全停止了在Objective-C上的維護(hù)。RxSwift項(xiàng)目的時(shí)間短一些只有幾個(gè)月(作者寫的時(shí)間是15年),但是社區(qū)似乎充滿了動(dòng)力。關(guān)于RxSwift有一件重要的事是項(xiàng)目是按照 ReactiveX這個(gè)組織的規(guī)定下開發(fā)的,并且所有其他語(yǔ)言的Rx項(xiàng)目也是一樣。如果學(xué)會(huì)了如何使用RxSwift,再去學(xué)習(xí)Rx.Net, RxJava 或者 RxJS就是小菜一碟,只是語(yǔ)言語(yǔ)法上的差異。這真的就是learn once, apply everywhere.

摘自沒故事的卓同學(xué)

知乎上某人的回答
如果項(xiàng)目中有oc,就用ReactiveCocoa;
要是用沒有,就用RxSwift咯

參考文章
RxSwift 介紹
一頭扎進(jìn) RxSwift
RxSwift文檔的中文翻譯
RxSwift使用教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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