RAC隨筆

1遮糖、信號創(chuàng)建

image.png

2冕广、信號訂閱

image.png

3、單個信號的變換

image.png

3.1 值操作

image.png
image.png
image.png

3.2 數(shù)量操作

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

3.3 時間操作

image.png
image.png

4 多個信號操作

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

4盈滴、信號的高階操作

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

5涯肩、冷信號和熱信號

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

6、RAC并發(fā)編程

image.png
image.png
image.png
image.png
image.png
image.png

7巢钓、RACChannel 雙向綁定

image.png
image.png
image.png
RACChannelTo(view, property) = RACChannelTo(model, property);   
等價于
[[RACKVOChannel alloc] initWithTarget:view keyPath:@"property" nilValue:nil][@"followingTerminal"] = [[RACKVOChannel alloc] initWithTarget:model keyPath:@"property" nilValue:nil][@"followingTerminal"];

[[RACKVOChannel alloc] initWithTarget:[NSUserDefaults standardUserDefaults]
                                  keyPath:@"someBoolKey" nilValue:@(NO)][@"followingTerminal"] = [[RACKVOChannel alloc] initWithTarget:self.someSwitch keyPath:@"on" nilValue:@(NO)][@"followingTerminal"];

// 上面的不能完全實現(xiàn)雙向綁定病苗,因為 UISwitch 的 on 屬性是不支持 KVO 的                        
@weakify(self)
[self.someSwitch.rac_newOnChannel subscribeNext:^(NSNumber *onValue) {
    @strongify(self)

    // 下面兩句都可以
    [self.someSwitch setValue:onValue forKey:@"on"];
    //[[NSUserDefaults standardUserDefaults] setObject:onValue forKey:@"someBoolKey"];
}];

8、其它

  • 1症汹、RACSignal


    image-20230424133128972.png
  • 2硫朦、RACSubject
    RACSubject,必須先訂閱者背镇,再發(fā)送信號咬展,這時訂閱者才能收到信號


    image-20230424134713167.png
  • 3、RACReplaySubject
    RACReplaySubject : 可以先發(fā)送信號瞒斩,再有訂閱者挚赊,


    image-20230424141457007.png
  • 4、RAC集合類


    image-20230424142103719.png
image-20230424142524302.png
image-20230424142933253.png
image-20230424143459724.png
  • 5济瓢、代替代理:直接監(jiān)聽SEL
image-20230424144219609.png
  • 6荠割、代替KVO
image-20230424151537311.png
  • 7、代替點擊事件


    image-20230424151747805.png
  • 8旺矾、代替通知


    image-20230424151959944.png
  • 9蔑鹦、監(jiān)聽文本框輸入


    image-20230424152228491.png
  • 10、定時器


    image.png
  • 11箕宙、信號同步


    image.png
  • 12嚎朽、RACMulticastConnection
    RACMulticastConnection:當(dāng)有多個訂閱時,只需要發(fā)送一次信號
    RACSignal : 當(dāng)有多個訂閱者的時候柬帕,信號會多次發(fā)送哟忍。


    image-20230425011635739.png
  • 13狡门、RACCommand


    image-20230425013055761.png

    image-20230425015421613.png

    image-20230425015907469.png
  • 14、bind


    image-20230426010146979.png

15锅很、then
信號A 和信號B其馏,當(dāng)A信號發(fā)送完畢后,才輪到信號B爆安,A的數(shù)據(jù)并沒有被訂閱處理叛复,只會訂閱處理B數(shù)據(jù)


image-20230505005618435.png

16、信號過濾

// 跳躍 : 如下扔仓,skip傳入2 跳過前面兩個值
// 實際用處: 在實際開發(fā)中比如 后臺返回的數(shù)據(jù)前面幾個沒用褐奥,我們想跳躍過去,便可以用skip
- (void)skip {
    RACSubject *subject = [RACSubject subject];
    [[subject skip:2] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    [subject sendNext:@1];
    [subject sendNext:@2];
    [subject sendNext:@3];
}


//distinctUntilChanged:-- 如果當(dāng)前的值跟上一次的值一樣翘簇,就不會被訂閱到
- (void)distinctUntilChanged {
    RACSubject *subject = [RACSubject subject];
    [[subject distinctUntilChanged] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    // 發(fā)送信號
    [subject sendNext:@1];
    [subject sendNext:@2];
    [subject sendNext:@2]; // 不會被訂閱
}


// take:可以屏蔽一些值,去前面幾個值---這里take為2 則只拿到前兩個值
- (void)take {
    RACSubject *subject = [RACSubject subject];
    [[subject take:2] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    // 發(fā)送信號
    [subject sendNext:@1];
    [subject sendNext:@2];
    [subject sendNext:@3];
}



//takeLast:和take的用法一樣撬码,不過他取的是最后的幾個值,如下版保,則取的是最后兩個值
//注意點:takeLast 一定要調(diào)用sendCompleted耍群,告訴他發(fā)送完成了,這樣才能取到最后的幾個值
- (void)takeLast {
    RACSubject *subject = [RACSubject subject];
    [[subject takeLast:2] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    // 發(fā)送信號
    [subject sendNext:@1];
    [subject sendNext:@2];
    [subject sendNext:@3];
    [subject sendCompleted];
}


// takeUntil:---給takeUntil傳的是哪個信號找筝,那么當(dāng)這個信號發(fā)送信號或sendCompleted蹈垢,就不能再接受源信號的內(nèi)容了。
- (void)takeUntil {
    RACSubject *subject = [RACSubject subject];
    RACSubject *subject2 = [RACSubject subject];
    [[subject takeUntil:subject2] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    // 發(fā)送信號
    [subject sendNext:@1];
    [subject sendNext:@2];
    [subject2 sendNext:@3];  // 1
//    [subject2 sendCompleted]; // 或2
    [subject sendNext:@4];
}


// ignore: 忽略掉一些值
- (void)ignore {
    //ignore:忽略一些值
    //ignoreValues:表示忽略所有的值
    // 1.創(chuàng)建信號
    RACSubject *subject = [RACSubject subject];
    // 2.忽略一些值
    RACSignal *ignoreSignal = [subject ignore:@2]; // ignoreValues:表示忽略所有的值
    // 3.訂閱信號
    [ignoreSignal subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    // 4.發(fā)送數(shù)據(jù)
    [subject sendNext:@2];
}


// 一般和文本框一起用袖裕,添加過濾條件
- (void)fliter {
    // 只有當(dāng)文本框的內(nèi)容長度大于5曹抬,才獲取文本框里的內(nèi)容
    [[self.textField.rac_textSignal filter:^BOOL(id value) {
        // value 源信號的內(nèi)容
        return [value length] > 5;
        // 返回值 就是過濾條件。只有滿足這個條件才能獲取到內(nèi)容
    }] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末急鳄,一起剝皮案震驚了整個濱河市谤民,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疾宏,老刑警劉巖张足,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坎藐,居然都是意外死亡为牍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門岩馍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉咆,“玉大人,你說我怎么就攤上這事蛀恩∫咄” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵双谆,是天一觀的道長壳咕。 經(jīng)常有香客問我席揽,道長,這世上最難降的妖魔是什么谓厘? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任幌羞,我火速辦了婚禮,結(jié)果婚禮上庞呕,老公的妹妹穿的比我還像新娘新翎。我一直安慰自己程帕,他們只是感情好住练,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愁拭,像睡著了一般讲逛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岭埠,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天盏混,我揣著相機與錄音,去河邊找鬼惜论。 笑死许赃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馆类。 我是一名探鬼主播混聊,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乾巧!你這毒婦竟也來了句喜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤沟于,失蹤者是張志新(化名)和其女友劉穎咳胃,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旷太,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡展懈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了供璧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片标沪。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗜傅,靈堂內(nèi)的尸體忽然破棺而出金句,到底是詐尸還是另有隱情,我是刑警寧澤吕嘀,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布违寞,位于F島的核電站贞瞒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趁曼。R本人自食惡果不足惜军浆,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挡闰。 院中可真熱鬧乒融,春花似錦、人聲如沸摄悯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奢驯。三九已至申钩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘪阁,已是汗流浹背撒遣。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留管跺,地道東北人义黎。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像豁跑,于是被迫代替她去往敵國和親廉涕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

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

  • RAC使用測試Demo下載:github.com/FuWees/WPRACTestDemo 1.ReactiveC...
    FuWees閱讀 6,368評論 3 10
  • 1.ReactiveCocoa簡介 ReactiveCocoa(簡稱RAC),是由Github開源的一個應(yīng)用于IO...
    雷晏閱讀 1,169評論 4 15
  • 前言由于公司需使用RAC+MVVM模式要寫業(yè)務(wù)邏輯贩绕,對于rac菜雞的我火的,不得不補習(xí)下功課,在RAC中淑倾,萬物皆信號哑了。...
    flowerflower閱讀 4,986評論 19 18
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,930評論 2 89
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,100評論 1 32