ReactiveCocoa中RACCommand的用法

作品鏈接:http://www.reibang.com/users/1e0f5e6f73f6/top_articles

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

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

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

二鼎兽、RACCommand使用注意:
1.signalBlock必須要返回一個信號,不能傳nil.
2.如果不想要傳遞信號汇四,直接創(chuàng)建空的信號[RACSignal empty];
3.RACCommand中信號如果數(shù)據(jù)傳遞完,必須調(diào)用[subscriber sendCompleted]踢涌,這時命令才會執(zhí)行完畢通孽,否則永遠處于執(zhí)行中。

三睁壁、RACCommand設(shè)計思想:內(nèi)部signalBlock為什么要返回一個信號背苦,這個信號有什么用。
1.在RAC開發(fā)中潘明,通常會把網(wǎng)絡(luò)請求封裝到RACCommand行剂,直接執(zhí)行某個RACCommand就能發(fā)送請求。
2.當RACCommand內(nèi)部請求到數(shù)據(jù)的時候钳降,需要把請求的數(shù)據(jù)傳遞給外界厚宰,這時候就需要通過signalBlock返回的信號傳遞了。

四遂填、如何拿到RACCommand中返回信號發(fā)出的數(shù)據(jù)铲觉。
1.RACCommand有個執(zhí)行信號源executionSignals,這個是signal of signals(信號的信號),意思是信號發(fā)出的數(shù)據(jù)是信號吓坚,不是普通的類型撵幽。
2.訂閱executionSignals就能拿到RACCommand中返回的信號,然后訂閱signalBlock返回的信號礁击,就能獲取發(fā)出的值盐杂。

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

六哆窿、使用場景,監(jiā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测垛,這時命令才執(zhí)行完畢。
            [subscriber sendCompleted];

            return nil;
        }];

    }];

    // 強引用命令秧均,不要被銷毀食侮,否則接收不到數(shù)據(jù)
    _conmmand = command;


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

    // 4.訂閱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);
    }];

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

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

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

    }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市眉尸,隨后出現(xiàn)的幾起案子域蜗,更是在濱河造成了極大的恐慌,老刑警劉巖噪猾,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霉祸,死亡現(xiàn)場離奇詭異,居然都是意外死亡袱蜡,警方通過查閱死者的電腦和手機丝蹭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坪蚁,“玉大人奔穿,你說我怎么就攤上這事∶粑睿” “怎么了贱田?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嘴脾。 經(jīng)常有香客問我男摧,道長,這世上最難降的妖魔是什么译打? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任彩倚,我火速辦了婚禮,結(jié)果婚禮上扶平,老公的妹妹穿的比我還像新娘帆离。我一直安慰自己,他們只是感情好结澄,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布哥谷。 她就那樣靜靜地躺著,像睡著了一般麻献。 火紅的嫁衣襯著肌膚如雪们妥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天勉吻,我揣著相機與錄音监婶,去河邊找鬼。 笑死,一個胖子當著我的面吹牛惑惶,可吹牛的內(nèi)容都是我干的煮盼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼带污,長吁一口氣:“原來是場噩夢啊……” “哼僵控!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鱼冀,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤报破,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后千绪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體充易,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年荸型,在試婚紗的時候發(fā)現(xiàn)自己被綠了盹靴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡帆疟,死狀恐怖鹉究,靈堂內(nèi)的尸體忽然破棺而出宇立,到底是詐尸還是另有隱情踪宠,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布妈嘹,位于F島的核電站柳琢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏润脸。R本人自食惡果不足惜柬脸,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毙驯。 院中可真熱鬧倒堕,春花似錦、人聲如沸爆价。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铭段。三九已至骤宣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間序愚,已是汗流浹背憔披。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芬膝。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓望门,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔗候。 傳聞我的和親對象是個殘疾皇子怒允,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

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

  • RAC使用測試Demo下載:github.com/FuWees/WPRACTestDemo 1.ReactiveC...
    FuWees閱讀 6,385評論 3 10
  • 1.ReactiveCocoa簡介 ReactiveCocoa(簡稱為RAC),是由Github開源的一個應(yīng)用于i...
    清蘂翅膀的技術(shù)閱讀 1,991評論 0 1
  • 1.ReactiveCocoa常見操作方法介紹。 1.1 ReactiveCocoa操作須知 所有的信號(RACS...
    萌芽的冬天閱讀 1,026評論 0 5
  • 前言由于時間的問題锈遥,暫且只更新這么多了纫事,后續(xù)還會持續(xù)更新本文《最快讓你上手ReactiveCocoa之進階篇》,目...
    Karos_凱閱讀 1,741評論 0 6
  • 我也不知道我現(xiàn)在應(yīng)該要用什么狀態(tài)來形容所灸,我只知道按著我原本的計劃去做就好了丽惶。我需要什么難道我需要一個契機恢復(fù)嗎?不...
    一只2b兔子閱讀 147評論 0 0