RAC API

轉(zhuǎn)載自http://www.lxweimin.com/p/a4fefb434652
一、常見類
1、RACSiganl 信號(hào)類。RACEmptySignal :空信號(hào),用來(lái)實(shí)現(xiàn) RACSignal 的 +empty 方法;
RACReturnSignal :一元信號(hào),用來(lái)實(shí)現(xiàn) RACSignal 的 +return: 方法;
RACDynamicSignal :動(dòng)態(tài)信號(hào),使用一個(gè) block - 來(lái)實(shí)現(xiàn)訂閱行為,我們?cè)谑褂?RACSignal 的 +createSignal: 方法時(shí)創(chuàng)建的就是該類的實(shí)例;
RACErrorSignal :錯(cuò)誤信號(hào),用來(lái)實(shí)現(xiàn) RACSignal 的 +error: 方法;
RACChannelTerminal :通道終端,代表 RACChannel 的一個(gè)終端,用來(lái)實(shí)現(xiàn)雙向綁定。

2、RACSubscriber 訂閱者
3、RACDisposable 用于取消訂閱或者清理資源,當(dāng)信號(hào)發(fā)送完成或者發(fā)送錯(cuò)誤的時(shí)候,就會(huì)自動(dòng)觸發(fā)它。RACSerialDisposable :作為 disposable 的容器使用,可以包含一個(gè) disposable 對(duì)象,并且允許將這個(gè) disposable 對(duì)象通過原子操作交換出來(lái);
RACKVOTrampoline :代表一次 KVO 觀察,并且可以用來(lái)停止觀察;
RACCompoundDisposable :它可以包含多個(gè) disposable 對(duì)象,并且支持手動(dòng)添加和移除 disposable 對(duì)象
RACScopedDisposable :當(dāng)它被 dealloc 的時(shí)候調(diào)用本身的 -dispose 方法。

4、RACSubject 信號(hào)提供者,自己可以充當(dāng)信號(hào),又能發(fā)送信號(hào)。RACGroupedSignal :分組信號(hào),用來(lái)實(shí)現(xiàn) RACSignal 的分組功能;
RACBehaviorSubject :重演最后值的信號(hào),當(dāng)被訂閱時(shí),會(huì)向訂閱者發(fā)送它最后接收到的值;
RACReplaySubject :重演信號(hào),保存發(fā)送過的值,當(dāng)被訂閱時(shí),會(huì)向訂閱者重新發(fā)送這些值。

5、RACTuple 元組類,類似NSArray,用來(lái)包裝值.
6、RACSequence RAC中的集合類
7、RACCommand RAC中用于處理事件的類,可以把事件如何處理,事件中的數(shù)據(jù)如何傳遞,包裝到這個(gè)類中,他可以很方便的監(jiān)控事件的執(zhí)行過程。
8、RACMulticastConnection 用于當(dāng)一個(gè)信號(hào),被多次訂閱時(shí),為了保證創(chuàng)建信號(hào)時(shí),避免多次調(diào)用創(chuàng)建信號(hào)中的block,造成副作用,可以使用這個(gè)類處理。
9、RACScheduler RAC中的隊(duì)列,用GCD封裝的。RACImmediateScheduler :立即執(zhí)行調(diào)度的任務(wù),這是唯一一個(gè)支持同步執(zhí)行的調(diào)度器;
RACQueueScheduler :一個(gè)抽象的隊(duì)列調(diào)度器,在一個(gè) GCD 串行列隊(duì)中異步調(diào)度所有任務(wù);
RACTargetQueueScheduler :繼承自 RACQueueScheduler ,在一個(gè)以一個(gè)任意的 GCD 隊(duì)列為 target 的串行隊(duì)列中異步調(diào)度所有任務(wù);
RACSubscriptionScheduler :一個(gè)只用來(lái)調(diào)度訂閱的調(diào)度器。

二、常見用法
rac_signalForSelector : 代替代理
rac_valuesAndChangesForKeyPath: KVO
rac_signalForControlEvents:監(jiān)聽事件
rac_addObserverForName 代替通知
rac_textSignal:監(jiān)聽文本框文字改變
rac_liftSelector:withSignalsFromArray:Signals:當(dāng)傳入的Signals(信號(hào)數(shù)組),每一個(gè)signal都至少sendNext過一次,就會(huì)去觸發(fā)第一個(gè)selector參數(shù)的方法。

三、常見宏
RAC(TARGET, [KEYPATH, [NIL_VALUE]]):用于給某個(gè)對(duì)象的某個(gè)屬性綁定
RACObserve(self, name) :監(jiān)聽某個(gè)對(duì)象的某個(gè)屬性,返回的是信號(hào)。
@weakify(Obj)和@strongify(Obj)
RACTuplePack :把數(shù)據(jù)包裝成RACTuple(元組類)
RACTupleUnpack:把RACTuple(元組類)解包成對(duì)應(yīng)的數(shù)據(jù)
RACChannelTo 用于雙向綁定的一個(gè)終端

四、常用操作方法
flattenMap map 用于把源信號(hào)內(nèi)容映射成新的內(nèi)容。
concat 組合 按一定順序拼接信號(hào),當(dāng)多個(gè)信號(hào)發(fā)出的時(shí)候,有順序的接收信號(hào)
then 用于連接兩個(gè)信號(hào),當(dāng)?shù)谝粋€(gè)信號(hào)完成,才會(huì)連接then返回的信號(hào)。
merge 把多個(gè)信號(hào)合并為一個(gè)信號(hào),任何一個(gè)信號(hào)有新值的時(shí)候就會(huì)調(diào)用
zipWith 把兩個(gè)信號(hào)壓縮成一個(gè)信號(hào),只有當(dāng)兩個(gè)信號(hào)同時(shí)發(fā)出信號(hào)內(nèi)容時(shí),并且把兩個(gè)信號(hào)的內(nèi)容合并成一個(gè)元組,才會(huì)觸發(fā)壓縮流的next事件。
combineLatest:將多個(gè)信號(hào)合并起來(lái),并且拿到各個(gè)信號(hào)的最新的值,必須每個(gè)合并的signal至少都有過一次sendNext,才會(huì)觸發(fā)合并的信號(hào)。
reduce聚合:用于信號(hào)發(fā)出的內(nèi)容是元組,把信號(hào)發(fā)出元組的值聚合成一個(gè)值

filter:過濾信號(hào),使用它可以獲取滿足條件的信號(hào).
ignore:忽略完某些值的信號(hào).
distinctUntilChanged:當(dāng)上一次的值和當(dāng)前的值有明顯的變化就會(huì)發(fā)出信號(hào),否則會(huì)被忽略掉。
take:從開始一共取N次的信號(hào)
takeLast:取最后N次的信號(hào),前提條件,訂閱者必須調(diào)用完成,因?yàn)橹挥型瓿?,就知道總共有多少信?hào).
takeUntil:(RACSignal *):獲取信號(hào)直到某個(gè)信號(hào)執(zhí)行完成
skip:(NSUInteger):跳過幾個(gè)信號(hào),不接受。
switchToLatest:用于signalOfSignals(信號(hào)的信號(hào)),有時(shí)候信號(hào)也會(huì)發(fā)出信號(hào),會(huì)在signalOfSignals中,獲取signalOfSignals發(fā)送的最新信號(hào)。

doNext: 執(zhí)行Next之前,會(huì)先執(zhí)行這個(gè)Block
doCompleted: 執(zhí)行sendCompleted之前,會(huì)先執(zhí)行這個(gè)Block
timeout:超時(shí),可以讓一個(gè)信號(hào)在一定的時(shí)間后,自動(dòng)報(bào)錯(cuò)。
interval 定時(shí):每隔一段時(shí)間發(fā)出信號(hào)
delay 延遲發(fā)送next。
retry重試 :只要失敗,就會(huì)重新執(zhí)行創(chuàng)建信號(hào)中的block,直到成功.
replay重放:當(dāng)一個(gè)信號(hào)被多次訂閱,反復(fù)播放內(nèi)容
throttle節(jié)流:當(dāng)某個(gè)信號(hào)發(fā)送比較頻繁時(shí),可以使用節(jié)流,在某一段時(shí)間不發(fā)送信號(hào)內(nèi)容,過了一段時(shí)間獲取信號(hào)的最新內(nèi)容發(fā)出。

五、UI - Category(常用匯總)
1、rac_prepareForReuseSignal: 需要復(fù)用時(shí)用相關(guān)UI: MKAnnotationView、UICollectionReusableView、UITableViewCell、UITableViewHeaderFooterView

2、rac_buttonClickedSignal:點(diǎn)擊事件觸發(fā)信號(hào)相關(guān)UI:UIActionSheet、UIAlertView

3、rac_command:button類、刷新類相關(guān)命令替換相關(guān)UI:UIBarButtonItem、UIButton、UIRefreshControl

4、rac_signalForControlEvents: control event 觸發(fā)相關(guān)UI:UIControl

5、rac_gestureSignal UIGestureRecognizer 事件處理信號(hào)相關(guān)UI:UIGestureRecognizer

6、rac_imageSelectedSignal 選擇圖片的信號(hào)相關(guān)UI:UIImagePickerController

7、rac_textSignal相關(guān)UI:UITextField、UITextView

8、可實(shí)現(xiàn)雙向綁定的相關(guān)API
rac_channelForControlEvents: key: nilValue:相關(guān)UI:UIControl
rac_newDateChannelWithNilValue:相關(guān)UI:UIDatePicker
rac_newSelectedSegmentIndexChannelWithNilValue:相關(guān)UI:UISegmentedControl
rac_newValueChannelWithNilValue:相關(guān)UI:UISlider、UIStepper
rac_newOnChannel相關(guān)UI:UISwitch
rac_newTextChannel相關(guān)UI:UITextField

六、Foundation - Category (常用匯總)
1、NSArray****rac_sequence 信號(hào)集合

2、NSData****rac_readContentsOfURL: options: scheduler: 比oc多出線程設(shè)置

3、NSDictionary****rac_sequence 不解釋
rac_keySequence key 集合
rac_valueSequence value 集合

4、NSEnumerator****rac_sequence 不解釋

5、NSFileHandle****rac_readInBackground 見名知意

6、NSIndexSet****rac_sequence 不解釋

7、NSInvocation****rac_setArgument: atIndex: 設(shè)置參數(shù)
rac_argumentAtIndex 取某個(gè)參數(shù)
rac_returnValue 所關(guān)聯(lián)方法的返回值

8、NSNotificationCenter****rac_addObserverForName: object:注冊(cè)通知

9、NSObject****rac_willDeallocSignal 對(duì)象銷毀時(shí)發(fā)動(dòng)的信號(hào)
rac_description debug用
rac_observeKeyPath: options: observer: block:監(jiān)聽某個(gè)事件
rac_liftSelector: withSignals: 全部信號(hào)都next在執(zhí)行
rac_signalForSelector: 代替某個(gè)方法
rac_signalForSelector:(SEL)selector fromProtocol:代替代理

9、NSOrderedSet****rac_sequence 不解釋

10、NSSet****rac_sequence 不解釋

11、NSString****rac_keyPathComponents 獲取一個(gè)路徑所有的部分
rac_keyPathByDeletingLastKeyPathComponent 刪除路徑最后一部分
rac_keyPathByDeletingFirstKeyPathComponent 刪除路徑第一部分
rac_sequence 不解釋 (character)
rac_readContentsOfURL: usedEncoding: scheduler: 比之OC多線程調(diào)用

12、NSURLConnection****rac_sendAsynchronousRequest 發(fā)起異步請(qǐng)求

13、NSUserDefaults****rac_channelTerminalForKey 用于雙向綁定,此乃一端

本文由簡(jiǎn)書作者 王隆帥 編寫,轉(zhuǎn)載請(qǐng)保留版權(quán)網(wǎng)址,感謝您的理解與分享,讓生活變的更美好!
七、參考資料
http://www.cocoachina.com/ios/20160105/14880.htmlhttp://www.lxweimin.com/p/d262f2c55fbehttp://www.lxweimin.com/p/da96980648b6http://mp.weixin.qq.com/s?__biz=MzA3NTk0NjMyOQ==&mid=2447907541&idx=1&sn=8defb283e2ad6cc76605c3a60118efc5&scene=23&srcid=0630vdTe3PFsuvZOrIhYmNLv#rdhttp://www.lxweimin.com/p/87ef6720a096http://www.lxweimin.com/p/e10e5ca413b7http://www.th7.cn/Program/IOS/201603/787954.shtml

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