ReactiveCocoa 學(xué)習(xí)筆記(一)

1.ReactiveCocoa簡介

ReactiveCocoa(簡稱為RAC),是由Github開源的一個應(yīng)用于iOS和OS開發(fā)的新框架,Cocoa是蘋果整套框架的簡稱,因此很多蘋果框架喜歡以Cocoa結(jié)尾。

2.ReactiveCocoa作用

在我們iOS開發(fā)過程中,當(dāng)某些事件響應(yīng)的時候,需要處理某些業(yè)務(wù)邏輯,這些事件都用不同的方式來處理。

比如按鈕的點擊使用action,ScrollView滾動使用delegate,屬性值改變使用KVO等系統(tǒng)提供的方式。

其實這些事件,都可以通過RAC處理

ReactiveCocoa為事件提供了很多處理方法,而且利用RAC處理事件很方便,可以把要處理的事情,和監(jiān)聽的事情的代碼放在一起,這樣非常方便我們管理,就不需要跳到對應(yīng)的方法里。非常符合我們開發(fā)中高聚合,低耦合的思想。

3.編程思想

在開發(fā)中我們也不能太依賴于某個框架,否則這個框架不更新了,導(dǎo)致項目后期沒辦法維護,比如之前Facebook提供的Three20框架,在當(dāng)時也是神器,但是后來不更新了,也就沒什么人用了。因此我感覺學(xué)習(xí)一個框架,還是有必要了解它的編程思想。

4.ReactiveCocoa編程思想

ReactiveCocoa結(jié)合了幾種編程風(fēng)格:

函數(shù)式編程(Functional Programming)

響應(yīng)式編程(Reactive Programming)

所以,你可能聽說過ReactiveCocoa被描述為函數(shù)響應(yīng)式編程(FRP)框架。

以后使用RAC解決問題,就不需要考慮調(diào)用順序,直接考慮結(jié)果,把每一次操作都寫成一系列嵌套的方法中,使代碼高聚合,方便管理。

5.如何導(dǎo)入ReactiveCocoa框架

通常都會使用CocoaPods(用于管理第三方框架的插件)幫助我們導(dǎo)入。

PS:CocoaPods教程

use_frameworks!

pod'ReactiveCocoa','~> 4.0.4-alpha-4'

6.ReactiveCocoa常見類。

學(xué)習(xí)框架首要之處:個人認為先要搞清楚框架中常用的類,在RAC中最核心的類RACSiganl,搞定這個類就能用ReactiveCocoa開發(fā)了。

6.1.RACSiganl:信號類,一般表示將來有數(shù)據(jù)傳遞,只要有數(shù)據(jù)改變,信號內(nèi)部接收到數(shù)據(jù),就會馬上發(fā)出數(shù)據(jù)。

注意:

信號類(RACSiganl),只是表示當(dāng)數(shù)據(jù)改變時,信號內(nèi)部會發(fā)出數(shù)據(jù),它本身不具備發(fā)送信號的能力,而是交給內(nèi)部一個訂閱者去發(fā)出。

默認一個信號都是冷信號,也就是值改變了,也不會觸發(fā),只有訂閱了這個信號,這個信號才會變?yōu)闊嵝盘?,值改變了才會觸發(fā)。

如何訂閱信號:調(diào)用信號RACSignal的subscribeNext就能訂閱。

6.2.RACSubscriber:表示訂閱者的意思,用于發(fā)送信號,這是一個協(xié)議,不是一個類,只要遵守這個協(xié)議,并且實現(xiàn)方法才能成為訂閱者。通過create創(chuàng)建的信號,都有一個訂閱者,幫助他發(fā)送數(shù)據(jù)。

6.3.RACDisposable:用于取消訂閱或者清理資源,當(dāng)信號發(fā)送完成或者發(fā)送錯誤的時候,就會自動觸發(fā)它。

使用場景:不想監(jiān)聽某個信號時,可以通過它主動取消訂閱信號。

6.4.RACSubject:RACSubject:信號提供者,自己可以充當(dāng)信號,又能發(fā)送信號。

使用場景:通常用來代替代理,有了它,就不必要定義代理了。

6.5.RACReplaySubject:重復(fù)提供信號類,RACSubject的子類。

RACReplaySubject與RACSubject區(qū)別:

RACReplaySubject可以先發(fā)送信號,在訂閱信號,RACSubject就不可以。

使用場景一:如果一個信號每被訂閱一次,就需要把之前的值重復(fù)發(fā)送一遍,使用重復(fù)提供信號類。

使用場景二:可以設(shè)置capacity數(shù)量來限制緩存的value的數(shù)量,即只緩充最新的幾個值。

6.6.RACTuple:元組類,類似NSArray,用來包裝值.

6.7.RACSequence:RAC中的集合類,用于代替NSArray,NSDictionary,可以使用它來快速遍歷數(shù)組和字典。

6.8.RACCommand:RAC中用于處理事件的類,可以把事件如何處理,事件中的數(shù)據(jù)如何傳遞,包裝到這個類中,他可以很方便的監(jiān)控事件的執(zhí)行過程。

使用場景:監(jiān)聽按鈕點擊,網(wǎng)絡(luò)請求

6.9.RACMulticastConnection:用于當(dāng)一個信號,被多次訂閱時,為了保證創(chuàng)建信號時,避免多次調(diào)用創(chuàng)建信號中的block,造成副作用,可以使用這個類處理。

使用注意:RACMulticastConnection通過RACSignal的-publish或者-muticast:方法創(chuàng)建.

6.10.RACScheduler:RAC中的隊列,用GCD封裝的。

7.ReactiveCocoa開發(fā)中常見用法。

7.1. 代替代理:

rac_signalForSelector:用于替代代理。

7.2. 代替KVO :

rac_valuesAndChangesForKeyPath:用于監(jiān)聽某個對象的屬性改變。

7.3. 監(jiān)聽事件:

rac_signalForControlEvents:用于監(jiān)聽某個事件。

7.4.代替通知:

rac_addObserverForName:用于監(jiān)聽某個通知。

7.5. 監(jiān)聽文本框文字改變:

rac_textSignal:只要文本框發(fā)出改變就會發(fā)出這個信號。

7.6. 處理當(dāng)界面有多次請求時,需要都獲取到數(shù)據(jù)時,才能展示界面

rac_liftSelector:withSignalsFromArray:Signals:當(dāng)傳入的Signals(信號數(shù)組),每一個signal都至少sendNext過一次,就會去觸發(fā)第一個selector參數(shù)的方法。

使用注意:幾個信號,參數(shù)一的方法就幾個參數(shù),每個參數(shù)對應(yīng)信號發(fā)出的數(shù)據(jù)。

最后編輯于
?著作權(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)容