響應(yīng)式編程-ReactiveCocoa(三)

轉(zhuǎn)載一篇RAC的常用API接口

一饿悬、常見類

  1. RACSiganl 信號(hào)類狡恬。
    RACEmptySignal :空信號(hào),用來實(shí)現(xiàn) RACSignal 的 +empty 方法祷安;
    RACReturnSignal :一元信號(hào)兔乞,用來實(shí)現(xiàn) RACSignal 的 +return: 方法庸追;
    RACDynamicSignal :動(dòng)態(tài)信號(hào)淡溯,使用一個(gè) block - 來實(shí)現(xiàn)訂閱行為,我們?cè)谑褂?RACSignal 的 +createSignal: 方法時(shí)創(chuàng)建的就是該類的實(shí)例米间;
    RACErrorSignal :錯(cuò)誤信號(hào)豺总,用來實(shí)現(xiàn) RACSignal 的 +error: 方法喻喳;
    RACChannelTerminal :通道終端困曙,代表 RACChannel 的一個(gè)終端慷丽,用來實(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ì)象通過原子操作交換出來宦言;
    RACKVOTrampoline :代表一次 KVO 觀察商模,并且可以用來停止觀察阻桅;
    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)确丢,用來實(shí)現(xiàn) RACSignal 的分組功能;
    RACBehaviorSubject :重演最后值的信號(hào)褂始,當(dāng)被訂閱時(shí)崎苗,會(huì)向訂閱者發(fā)送它最后接收到的值舀寓;
    RACReplaySubject :重演信號(hào)基公,保存發(fā)送過的值轰豆,當(dāng)被訂閱時(shí)齿诞,會(huì)向訂閱者重新發(fā)送這些值祷杈。
  5. RACTuple 元組類,類似NSArray,用來包裝值.
  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è)只用來調(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)合并起來,并且拿到各個(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除抛、UICollectionReusableViewUITableViewCell母截、UITableViewHeaderFooterView

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

  3. rac_command:button類、刷新類相關(guān)命令替換
    相關(guān)UI:UIBarButtonItemUIButton喘漏、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:UISliderUIStepper
    • 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:代替代理
  10. NSOrderedSet
    • rac_sequence 不解釋
  11. NSSet
    • rac_sequence 不解釋
  12. NSString
    • rac_keyPathComponents 獲取一個(gè)路徑所有的部分
    • rac_keyPathByDeletingLastKeyPathComponent 刪除路徑最后一部分
    • rac_keyPathByDeletingFirstKeyPathComponent 刪除路徑第一部分
    • rac_sequence 不解釋 (character)
    • rac_readContentsOfURL: usedEncoding: scheduler: 比之OC多線程調(diào)用
  13. NSURLConnection
    • rac_sendAsynchronousRequest 發(fā)起異步請(qǐng)求
  14. NSUserDefaults
    • rac_channelTerminalForKey 用于雙向綁定持灰,此乃一端
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市负饲,隨后出現(xiàn)的幾起案子堤魁,更是在濱河造成了極大的恐慌,老刑警劉巖返十,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妥泉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡洞坑,警方通過查閱死者的電腦和手機(jī)盲链,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迟杂,“玉大人刽沾,你說我怎么就攤上這事∨趴剑” “怎么了悠轩?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)攻泼。 經(jīng)常有香客問我火架,道長(zhǎng),這世上最難降的妖魔是什么忙菠? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任何鸡,我火速辦了婚禮,結(jié)果婚禮上牛欢,老公的妹妹穿的比我還像新娘骡男。我一直安慰自己,他們只是感情好傍睹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布隔盛。 她就那樣靜靜地躺著,像睡著了一般拾稳。 火紅的嫁衣襯著肌膚如雪吮炕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天访得,我揣著相機(jī)與錄音龙亲,去河邊找鬼陕凹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鳄炉,可吹牛的內(nèi)容都是我干的杜耙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼拂盯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼佑女!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谈竿,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤团驱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后榕订,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體店茶,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年劫恒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贩幻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡两嘴,死狀恐怖丛楚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情憔辫,我是刑警寧澤趣些,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站贰您,受9級(jí)特大地震影響坏平,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锦亦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一舶替、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杠园,春花似錦顾瞪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瞧甩,卻和暖如春钉跷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亲配。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工尘应, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惶凝,地道東北人吼虎。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓犬钢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親思灰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玷犹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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