RACSubject可以作為信號(RACSign)使用同時(shí)又能發(fā)送信號,同時(shí)可以被多次訂閱贤徒,非常適合觸發(fā)一個(gè)點(diǎn)义起,多個(gè)點(diǎn)響應(yīng)這樣的需求。
RACSubject
和RACSignl一樣住闯,三個(gè)步驟1.創(chuàng)建信號 2.訂閱信號 3.發(fā)送信號
//創(chuàng)建信號
RACSubject * subject = [RACSubject subject];
//訂閱信號1
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"收到的內(nèi)容1:%@",x);
}];
//訂閱信號2
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"收到的內(nèi)容2:%@",x);
}];
//發(fā)送信號
[subject sendNext:@"我是數(shù)據(jù)"];
//打印:
//收到的內(nèi)容1:我是數(shù)據(jù)
//收到的內(nèi)容2:我是數(shù)據(jù)
源碼分析
細(xì)心的朋友可能已經(jīng)發(fā)現(xiàn)與RACSinal不同的是RACSubject即作為信號澳淑,又作為訂閱者發(fā)送信號比原。其實(shí)RACSubject是這樣的:
Snip20161222_1.png
這樣也就不奇怪為什么RACSubject即可作為信號,又可作為訂閱者發(fā)送信號了吧杠巡,其實(shí)一個(gè)類如果想擁有多個(gè)類的功能春寿,可以繼承一個(gè)類,再遵守多個(gè)類的協(xié)議忽孽,即面向協(xié)議思想。
1.
RACSubject * subject = [RACSubject subject];
創(chuàng)建信號并返回一個(gè)空數(shù)組。2.
[subject subscribeNext:^(id _Nullable x) {···}];
保存Block,并將訂閱者加入到1中返回的數(shù)組中去兄一。3.
[subject sendNext:@"我是數(shù)據(jù)"];
發(fā)送信號時(shí)遍歷數(shù)組中的所有訂閱者厘线,并執(zhí)行訂閱者中的block.
運(yùn)用場景
1.替代delegate
2.觸發(fā)一點(diǎn),多點(diǎn)響應(yīng)的需求