ReactiveCocoa進階——RACCommand的使用
總結(jié):
1、RACSignal 和 RACSubject 的區(qū)別
RACSubject繼承于RACSignal,所以RACSubject也是信號類型,使用場景有所區(qū)分
RACSignal:"一個方法,多個值"
RACSubject:"一個值,多個方法"
/*
創(chuàng)建信號,block 的返回值
1-- 返回一個RACDisposable 對象,允許在一個訂閱被取消時執(zhí)行一些
清理工作
2-- 返回 nil 表示不清理信號
*/
/* ======================== RACSignal ======================= */
//1.0 創(chuàng)建信號
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//2.0 發(fā)送信號
[subscriber sendNext:@(1)];
[subscriber sendNext:@(2)];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
NSLog(@"信號被銷毀");
}];
}];
//3.0 訂閱信號,才會激活信號
[signal subscribeNext:^(id x) {
//block 調(diào)用時刻: 每當(dāng)有信號發(fā)出數(shù)據(jù),就會調(diào)用block
NSLog(@"RACSignal 接收到數(shù)據(jù):%@",x);
}];
[signal subscribeNext:^(id x) {
//block 調(diào)用時刻: 每當(dāng)有信號發(fā)出數(shù)據(jù),就會調(diào)用block
NSLog(@"RACSignal 接收到數(shù)據(jù):%@",x);
}];
/* ======================== RACSubject ======================= */
//1.0 創(chuàng)建信號
RACSubject *subject = [RACSubject subject];
//2.0 訂閱信號
[subject subscribeNext:^(id x) {
NSLog(@"RACSubject 收到信號1:%@",x);
}];
[subject subscribeNext:^(id x) {
NSLog(@"RACSubject 收到消息2:%@",x);
}];
//3.0 發(fā)送信號
[subject sendNext:@(1)];
[subject sendNext:@(2)];
輸出結(jié)果:

image.png