RACSubject及其子類的一些用法

RACSubject

RACSubject繼承自RACSignal,并實(shí)現(xiàn)RACSubscriber協(xié)議。所以它可以生成信號源,也可以訂閱信號。

- (void)testSubject {
    RACSubject *subject = [RACSubject subject];
    
    // 作為信號源,被訂閱
    [subject subscribeNext:^(id x) {
        
        NSLog(@"訂閱者一%@",x);
    }];
    
    [subject subscribeNext:^(id x) {
    
        NSLog(@"訂閱者二%@",x);
    }];
    
    
    // 作為訂閱者,發(fā)送信號
    [subject sendNext:@1];
}

RACSubject在被訂閱時,block會包裝進(jìn)RACSubscriber生成訂閱者o對象,然后通過subscribe:訂閱方法保存到subscribers數(shù)組中,所以RACSubject可以被訂閱多次。而RACSignal不具備此功能

RACReplaySubject

繼承自RACSubject,會保存發(fā)送信號的值。所以在訂閱時,會把信號值全部發(fā)送。無論訂閱和發(fā)送信號的順序,訂閱的block內(nèi)都會收到信號值。

- (void)testReplay {
    RACReplaySubject *subject = [RACReplaySubject subject];
    
    // 發(fā)送信號
    [subject sendNext:@"12"];
    
    // 訂閱信號
    [subject subscribeNext:^(id x) {
        NSLog(@"訂閱者一%@",x);
    }];
    
    // 發(fā)送信號
    [subject sendNext:@"34"];
    [subject sendNext:@"56"];
    // 1.把值保存到數(shù)組
    // 2.遍歷所有的訂閱者,調(diào)用nextBlock
    
    // 訂閱信號
    [subject subscribeNext:^(id x) {
        NSLog(@"訂閱者二%@",x);
    }];
}

RACReplaySubject把信號值存放在valuesReceived數(shù)組內(nèi)后,會執(zhí)行父類的sendNext:方法,所以即使是后面發(fā)送的信號,之前訂閱過也會收到。

RACBehaviorSubject

RACBehaviorSubject,把最后一次sendNext的值保存在currentValue變量內(nèi)。所以先訂閱的信號會收到每次發(fā)送的信號值,而后訂閱的信號之后收到最后一次信號值。

RACGroupedSignal

可以講信號分組,一般用在[RACSignal groupBy:transform:]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容