RXSwift

  1. 由于Swift是一門靜態(tài)語言,對于相應(yīng)數(shù)值的傳遞、響應(yīng)的回調(diào)、通訊等系列會有一定的影響,不像Objective-C具備運行時機制能夠動態(tài)的傳遞發(fā)送消息這么靈活,而RXSwift彌補了這一點。
  2. Swift函數(shù)響應(yīng)式編程思想也是每個開發(fā)者在未來的開發(fā)中必須掌握的
  3. SwiftiOS接下來開發(fā)的重點,而函數(shù)響應(yīng)式編程也是Swift未來的趨勢
  4. ReactiveX 是一個跨平臺框架

RXSwift特點:
復(fù)合 - Rx就是和復(fù)合的代名詞
復(fù)用 - 復(fù)用性比較強 - 代碼量降低
清晰 - 因為聲明都不可變更,代碼函數(shù)式編程可讀性強
易用 - 理解容易,還抽象了異步編程,統(tǒng)一代碼風(fēng)格
穩(wěn)定 - 因為 Rx 是完全通過單元測試的
裝逼 - 代碼的逼格很明顯比原生高太多了

說到RXSwift首先得提到FRP

函數(shù)式編程

函數(shù)式編程(Functional Programming)是種編程方式,它將電腦運算視為函數(shù)的計算。函數(shù)編程語言最重要的基礎(chǔ)是λ演算(lambda calculus),而且λ演算的函數(shù)可以接受函數(shù)當(dāng)作輸入(參數(shù))和輸出(返回值)。
和指令編程相比,函數(shù)式編程強調(diào)函數(shù)的計算比指令的執(zhí)行重要。
和過程化編程相比,函數(shù)式編程里函數(shù)的計算可隨時調(diào)用。

通過案例測試發(fā)現(xiàn)函數(shù)式的編程邏輯比以往普通的邏輯更具有可讀性和清晰度

響應(yīng)式編程

響應(yīng)式編程(Reactive Programming)是一種面向數(shù)據(jù)流和變化傳播的編程范式。這意味著可以在編程語言中很方便地表達(dá)靜態(tài)或動態(tài)的數(shù)據(jù)流,而相關(guān)的計算模型會自動將變化的值通過數(shù)據(jù)流進(jìn)行傳播。

通過偽代碼可了解到a的值改變后b的值并不會相應(yīng)的改變,而在a的值改變的同時b的值也跟著改變這就是響應(yīng)式

監(jiān)聽和響應(yīng)綁定在一起就是KVO,而KVO里最重要的也就是”三部曲 “

通過案例發(fā)現(xiàn)雖然觀察者模式實現(xiàn)了響應(yīng)但是功能和業(yè)務(wù)邏輯的代碼是分散,這里的接口還不是很多,如果有上百個那查找響應(yīng)的接口實現(xiàn)是非常痛苦的,接下來就引入一個牛逼的框架RXSwift

通過案例發(fā)現(xiàn)RXSwift應(yīng)用在KVO的簡單方便,而除了KVO,其實還可應(yīng)用在UI

可以發(fā)現(xiàn)常規(guī)綁定按鈕的響應(yīng)事件是需要單獨實現(xiàn)一個響應(yīng)的函數(shù),即業(yè)務(wù)邏輯和功能分開了

案例中按鈕的點擊的響應(yīng)功能和邏輯代碼寫在了一起
通過上面的觀察者模式和按鈕響應(yīng)的點擊響應(yīng)發(fā)現(xiàn)為什么都可以.rx呢?

RXSwift的源碼中可看到RXSwiftNSObject進(jìn)行了擴展實現(xiàn)了ReactiveCompatible協(xié)議,在協(xié)議中定義了rx的協(xié)議屬性,這也就是為什萬物皆可.rx的原因。

通過上面案例發(fā)現(xiàn)通過rx的綁定函數(shù)直接將textField的文本信息綁定到了buttontitle上,這使得UI效果就變得很簡單了,而且更面向開發(fā)者,切記盲目使用因為會上癮。

RXSwift滾動視圖應(yīng)用

RXSwift手勢的應(yīng)用

RXSwift通知的應(yīng)用

RXSwift定時器的應(yīng)用

在定時器的應(yīng)用中,此定時器并不是NSTimer而是繼承于ProducerTimer,并且測試可發(fā)現(xiàn)在滾動視圖滑動式并不會堵塞定時的任務(wù)

RXSwift網(wǎng)絡(luò)的應(yīng)用

通過RXSwift的封裝將網(wǎng)絡(luò)請求的響應(yīng)、錯誤、數(shù)據(jù)都進(jìn)行了分層,分層后顯得更簡單了

序列

訂閱Next信號

在時間軸上可能會訂閱到1,2,3,4,5 但也可能還有很多,即可能為有窮序列也可能為無窮序列

訂閱Error信號

當(dāng)訂閱到Error信號時,序列為有窮序列

訂閱完成Complete信號

當(dāng)訂閱到Complete信號時,序列為有窮序列

RXSwift無窮序列可表現(xiàn)為

RXSwift有窮序列可表現(xiàn)為

通過以上的案例也驗證了序列的核心流程三部曲

通過案例發(fā)現(xiàn)訂閱中心的測試流到了訂閱信號的閉包里面,這個邏輯又是怎么實現(xiàn)的呢?請看RXSwift序列核心邏輯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容