iOS RAC學(xué)習(xí)筆記 從零起步 (第二天)

前言

書接上回童本,上回講到了RAC的基本概念還有基礎(chǔ)的類,相信大家有一定的印象了脸候∏钣椋可能有很多人說還不懂怎么應(yīng)用,或者有點(diǎn)理解不透徹运沦。表著急泵额,現(xiàn)在我就一點(diǎn)一點(diǎn)從簡單應(yīng)用開始,配合代碼茶袒,給大家一點(diǎn)明確的講解,告訴大家RAC的部分簡單應(yīng)用凉馆,作為今天的第二天課程薪寓。

RACSubject簡單應(yīng)用

1. RACSubject的使用步驟

RACSubject使用步驟

2. RACSubject替換代理
需求邏輯:頁面一有一個(gè)按鈕,點(diǎn)擊按鈕澜共,跳轉(zhuǎn)到頁面二向叉。頁面二也有個(gè)按鈕,點(diǎn)擊頁面二的按鈕嗦董,頁面一接收到按鈕被點(diǎn)擊的事件母谎。

頁面二.h
頁面一.m
頁面二.m

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

// 一匹摇、RACCommand使用步驟:
// 1.創(chuàng)建命令 initWithSignalBlock:(RACSignal * (^)(id input))signalBlock
// 2.在signalBlock中咬扇,創(chuàng)建RACSignal,并且作為signalBlock的返回值
// 3.執(zhí)行命令 - (RACSignal *)execute:(id)input

// 二廊勃、RACCommand使用注意:
// 1.signalBlock必須要返回一個(gè)信號懈贺,不能傳nil.
// 2.如果不想要傳遞信號,直接創(chuàng)建空的信號[RACSignal empty];
// 3.RACCommand中信號如果數(shù)據(jù)傳遞完,必須調(diào)用[subscriber sendCompleted]梭灿,這時(shí)命令才會執(zhí)行完畢画侣,否則永遠(yuǎn)處于執(zhí)行中。
// 4.RACCommand需要被強(qiáng)引用堡妒,否則接收不到RACCommand中的信號配乱,因此RACCommand中的信號是延遲發(fā)送的。

// 三涕蚤、RACCommand設(shè)計(jì)思想:內(nèi)部signalBlock為什么要返回一個(gè)信號宪卿,這個(gè)信號有什么用。
// 1.在RAC開發(fā)中万栅,通常會把網(wǎng)絡(luò)請求封裝到RACCommand佑钾,直接執(zhí)行某個(gè)RACCommand就能發(fā)送請求。
// 2.當(dāng)RACCommand內(nèi)部請求到數(shù)據(jù)的時(shí)候烦粒,需要把請求的數(shù)據(jù)傳遞給外界休溶,這時(shí)候就需要通過signalBlock返回的信號傳遞了。

// 四扰她、如何拿到RACCommand中返回信號發(fā)出的數(shù)據(jù)兽掰。
// 1.RACCommand有個(gè)執(zhí)行信號源executionSignals,這個(gè)是signal of signals(信號的信號),意思是信號發(fā)出的數(shù)據(jù)是信號徒役,不是普通的類型孽尽。
// 2.訂閱executionSignals就能拿到RACCommand中返回的信號,然后訂閱signalBlock返回的信號忧勿,就能獲取發(fā)出的值杉女。

// 五、監(jiān)聽當(dāng)前命令是否正在執(zhí)行executing

// 六鸳吸、使用場景,監(jiān)聽按鈕點(diǎn)擊熏挎,網(wǎng)絡(luò)請求


// 1.創(chuàng)建命令
RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {


    NSLog(@"執(zhí)行命令");

    // 創(chuàng)建空信號,必須返回信號
    //        return [RACSignal empty];

    // 2.創(chuàng)建信號,用來傳遞數(shù)據(jù)
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

        [subscriber sendNext:@"請求數(shù)據(jù)"];

        // 注意:數(shù)據(jù)傳遞完,最好調(diào)用sendCompleted晌砾,這時(shí)命令才執(zhí)行完畢坎拐。
        [subscriber sendCompleted];

        return nil;
    }];

}];

// 強(qiáng)引用命令,不要被銷毀养匈,否則接收不到數(shù)據(jù)
_conmmand = command;



// 3.訂閱RACCommand中的信號
[command.executionSignals subscribeNext:^(id x) {

    [x subscribeNext:^(id x) {

        NSLog(@"%@",x);
    }];

}];

// RAC高級用法
// switchToLatest:用于signal of signals哼勇,獲取signal of signals發(fā)出的最新信號,也就是可以直接拿到RACCommand中的信號
[command.executionSignals.switchToLatest subscribeNext:^(id x) {

    NSLog(@"%@",x);
}];

// 4.監(jiān)聽命令是否執(zhí)行完畢,默認(rèn)會來一次,可以直接跳過呕乎,skip表示跳過第一次信號猴蹂。
[[command.executing skip:1] subscribeNext:^(id x) {

    if ([x boolValue] == YES) {
        // 正在執(zhí)行
        NSLog(@"正在執(zhí)行");

    }else{
        // 執(zhí)行完成
        NSLog(@"執(zhí)行完成");
    }

}]; // 5.執(zhí)行命令
[self.conmmand execute:@1];

簡單應(yīng)用代碼如下

場景講解:列表頁面,含有上拉刷新和下拉加載
(項(xiàng)目中我是用的MVVM模式楣嘁,不懂的朋友磅轻,可以看我原來寫的文章珍逸,RACCommand寫在viewModel類里面)

viewModel.h

(.m中含有RACSubscriber,提前講解一下聋溜。表示訂閱者的意思谆膳,用于發(fā)送信號,這是一個(gè)協(xié)議撮躁,不是一個(gè)類漱病,只要遵守這個(gè)協(xié)議,并且實(shí)現(xiàn)方法才能成為訂閱者把曼。通過create創(chuàng)建的信號杨帽,都有一個(gè)訂閱者,幫助他發(fā)送數(shù)據(jù)嗤军。)

viewModel.m 中刷新數(shù)據(jù)
viewModel.m 中數(shù)據(jù)處理

小結(jié)

今天講解了RAC基本幾大類的用法注盈,慢慢體會,你會發(fā)現(xiàn)挺有意思的叙赚,學(xué)知識要循序漸進(jìn)老客,今天就先寫這么多吧。很快將會有下一階段的講解震叮,從簡到繁胧砰,喜歡的朋友歡迎關(guān)注,謝謝支持苇瓣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尉间,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子击罪,更是在濱河造成了極大的恐慌哲嘲,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件外邓,死亡現(xiàn)場離奇詭異撤蚊,居然都是意外死亡古掏,警方通過查閱死者的電腦和手機(jī)损话,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來槽唾,“玉大人丧枪,你說我怎么就攤上這事∨悠迹” “怎么了拧烦?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钝计。 經(jīng)常有香客問我恋博,道長齐佳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任债沮,我火速辦了婚禮炼吴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疫衩。我一直安慰自己硅蹦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布闷煤。 她就那樣靜靜地躺著童芹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鲤拿。 梳的紋絲不亂的頭發(fā)上假褪,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機(jī)與錄音皆愉,去河邊找鬼嗜价。 笑死,一個(gè)胖子當(dāng)著我的面吹牛幕庐,可吹牛的內(nèi)容都是我干的久锥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼异剥,長吁一口氣:“原來是場噩夢啊……” “哼瑟由!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冤寿,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤歹苦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后督怜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殴瘦,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年号杠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚪腋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姨蟋,死狀恐怖屉凯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情眼溶,我是刑警寧澤悠砚,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站堂飞,受9級特大地震影響灌旧,放射性物質(zhì)發(fā)生泄漏绑咱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一枢泰、第九天 我趴在偏房一處隱蔽的房頂上張望羡玛。 院中可真熱鬧,春花似錦宗苍、人聲如沸稼稿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽让歼。三九已至,卻和暖如春丽啡,著一層夾襖步出監(jiān)牢的瞬間谋右,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工补箍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留改执,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓坑雅,卻偏偏與公主長得像辈挂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子裹粤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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