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