RAC combineLatest和merge分析

一碑诉、combineLatest:使用方法為

RACSubject *baseSubjectTwo = [RACSubject subject];
    RACSubject *baseSignal = [RACSubject subject];
    [[RACSignal combineLatest:@[baseSignal,baseSubjectTwo]]subscribeNext:^(id x) {
        NSLog(@"信號發(fā)送combineLatest");
    }];

此代碼是將combineLatest:后面的數(shù)組中的信合打包成為一個新的信號极景。只有當(dāng)兩個信號都成功發(fā)送過信號的時候打包后的信號才能正常執(zhí)行訂閱后的代碼塊措伐。
測試代碼如下

self.oneSubejct = [RACSubject subject];
    RACSubject *baseSignal = [RACSubject subject];
    [[RACSignal combineLatest:@[baseSignal,self.oneSubejct]]subscribeNext:^(id x) {
        NSLog(@"信號發(fā)送combineLatest");
    }];
    
    [baseSignal sendNext:@"testBac"];

控制臺并沒有任何輸出。因?yàn)橹挥衎aseSignal進(jìn)行的信號的發(fā)送。self.oneSubject并沒有對信號發(fā)送棒搜。組合信號信息發(fā)送失敗豌鸡。

二嘿般、merge
此代碼可以將merge:后數(shù)組中的信號合并為一個信號。只有有任意一個信號完成信息的發(fā)送涯冠。那么合并后的信號就可以正常的接收到信號炉奴。
測試代碼如下

self.oneSubejct = [RACSubject subject];
    RACSubject *baseSignal = [RACSubject subject];
    [[RACSignal merge:@[self.oneSubejct,baseSignal]]subscribeNext:^(id x) {
        NSLog(@"信號merge發(fā)送信號");
    }];
    [baseSignal sendNext:@"testBac"];

控制臺輸出

2018-01-26 15:42:07.763738+0800 RacReplaySubjectTest[3025:162396] 信號merge發(fā)送信號

結(jié)果分析:
combineLatest:被打包的信號都要完成信號的發(fā)送才能正常接收到信號。
merge:被合并的信號有任意一個完成發(fā)送都能正常被訂閱接收信號蛇更。
注意:combineLatest打包的信號瞻赶。只要所有的信號都已經(jīng)被成功調(diào)閱過。就可以接收到發(fā)送的信號械荷。信號被訂閱之后共耍,只要任意一個信號觸發(fā)都可以。
效果如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.oneSubejct = [RACSubject subject];
    RACSubject *baseSignal = [RACSubject subject];
    [[RACSignal combineLatest:@[baseSignal,self.oneSubejct]]subscribeNext:^(id x) {
        NSLog(@"信號發(fā)送combineLatest");
    }];
    [baseSignal sendNext:@"testBac"];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self.oneSubejct sendNext:@"abc"];
}

此程序在第一次運(yùn)行的時候吨瞎。因?yàn)橹挥衎aseSignal信號完成了信號的發(fā)送痹兜。所以combineLatest組合合成的信號并不能完成信號的訂閱。
然后我們在view的touch事件上完成了self.oneSubject信號的發(fā)送颤诀。這個時候字旭。可以看到控制臺完成了輸出崖叫。
2018-01-26 15:49:46.566807+0800 RacReplaySubjectTest[3057:165306] 信號發(fā)送combineLatest

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遗淳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子心傀,更是在濱河造成了極大的恐慌屈暗,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異养叛,居然都是意外死亡种呐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門弃甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爽室,“玉大人,你說我怎么就攤上這事淆攻±眨” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵瓶珊,是天一觀的道長啸箫。 經(jīng)常有香客問我,道長艰毒,這世上最難降的妖魔是什么筐高? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮丑瞧,結(jié)果婚禮上柑土,老公的妹妹穿的比我還像新娘。我一直安慰自己绊汹,他們只是感情好稽屏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著西乖,像睡著了一般狐榔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上获雕,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天薄腻,我揣著相機(jī)與錄音,去河邊找鬼届案。 笑死庵楷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的楣颠。 我是一名探鬼主播尽纽,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼童漩!你這毒婦竟也來了弄贿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤矫膨,失蹤者是張志新(化名)和其女友劉穎差凹,沒想到半個月后期奔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡危尿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年能庆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脚线。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弥搞,靈堂內(nèi)的尸體忽然破棺而出邮绿,到底是詐尸還是另有隱情,我是刑警寧澤攀例,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布船逮,位于F島的核電站,受9級特大地震影響粤铭,放射性物質(zhì)發(fā)生泄漏挖胃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一梆惯、第九天 我趴在偏房一處隱蔽的房頂上張望酱鸭。 院中可真熱鬧,春花似錦垛吗、人聲如沸凹髓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔚舀。三九已至,卻和暖如春锨络,著一層夾襖步出監(jiān)牢的瞬間赌躺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工羡儿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留礼患,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓失受,卻偏偏與公主長得像讶泰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拂到,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

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