1. RACSignal
是ReactiveCocoa 中的一对一的单向数据流
2. RACMulticastConnection
一对多的单向数据流 RACMulticastConnection
在一个信号中发送请求,每次订阅一次都会发送请求,这样就会导致多次请求。
使用RACMulticastConnection,无论有多少个订阅者,无论订阅多少次,我只发送一次。
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[subscriber sendNext: @"haha"];
[subscriber sendCompleted];
return nil;
}];
RACMulticastConnection *connection = [signal publish];
[connection.signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@,",x);
}];
[connection.signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@,",x);
}];
//必须连接才会变为热信号
[connection connect];
3. RACChannel
一对一的双向数据流 RACChannel
方式一:
RACChannelTo(view, property) = RACChannelTo(model, property);
方式二:(等价方式一)
[[RACKVOChannel alloc] initWithTarget:view
keyPath:@"property"
nilValue:nil][@"followingTerminal"]
= [[RACKVOChannel alloc] initWithTarget:model
keyPath:@"property"
nilValue:nil][@"followingTerminal"];
方式三:
RACChannelTerminal *channelA = RACChannelTo(self, valueA);
RACChannelTerminal *channelB = RACChannelTo(self, valueB);
// valueA: On表示打开,Off表示关闭
// valueB: 1表示打开,0表示关闭
[[channelA map:^id(NSString *value) {
if ([value isEqualToString:@"On"]) {
return @"1";
} else {
return @"0";
}
}] subscribe:channelB];
[[channelB map:^id(NSString *value) {
if ([value isEqualToString:@"1"]) {
return @"On";
} else {
return @"Off";
}
}] subscribe:channelA];