//参考学习http://www.jianshu.com/p/87ef6720a096
//参考学习http://www.jianshu.com/p/451c46fed8d3
//基础应用
RACSignal *signal = [RACSignal return:@"最简单的测试"];
[signal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
//返回结果:最简单的测试
RACSignal *signal=[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"这个是比较啰嗦的写法"];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
// block调用时刻:当信号发送完成或者发送错误,就会自动执行这个block,取消订阅信号。
// 执行完Block后,当前信号就不在被订阅了。
NSLog(@"信号被销毁");
}];
}];
[signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
//返回结果:这个是比较啰嗦的写法
//RACSubject:信号提供者,自己可以充当信号,又能发送信号,通常用来代替代理
RACSubject *subject = [RACSubject subject];
[subject subscribeNext:^(id x) {
NSLog(@"%@上车了",x);
}];
[subject subscribeNext:^(id x) {
// block调用时刻:当信号发出新值,就会调用.
NSLog(@"%@又上车了",x);
}];
//补票
[subject sendNext:@"隔壁老王"];
//返回结果://2017-02-08 13:43:56.981719 reactivecocoa_practise[7266:2311561] 隔壁老王上车了
//2017-02-08 13:43:56.981736 reactivecocoa_practise[7266:2311561] 隔壁老王又上车了
//遍历数组
NSArray *numbers = @[@"上餐车",@"煮饭",@"爆米花",@"补票"];
[numbers.rac_sequence.signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
// 遍历字典
NSDictionary *dict = @{@"name":@"老王",@"location":@“隔壁”};
[dict.rac_sequence.signal subscribeNext:^(RACTuple *x) {
RACTupleUnpack(NSString *key,NSString *value) = x;
NSLog(@"%@住在%@",key,value);
}];
//flatten应用
RACSubject *girl1 = [RACSubject subject];
RACSubject *girl2 = [RACSubject subject];
RACSubject *girl3 = [RACSubject subject];
RACSignal *sig = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:girl1];
[subscriber sendNext:girl2];
[subscriber sendNext:girl3];
return nil;
}];
[[sig flatten:2] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
[test1 sendNext:@"给小一打电话"];
[test2 sendNext:@"给小二打电话"];
[test3 sendNext:@"给小三打电话"];
//注:flatten会把信号中的值取出,参数用于限制并发数量
//map应用
RACSignal *signal=[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"先发个喜帖"];
[subscriber sendCompleted];
return nil;
}]map:^id(id value) {
return @"内容改成满月酒了";
}];
[signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
//返回结果:内容改成满月酒了
//concat:当一个signal完成时接着调用下一个信号 repeat:重复
RACSignal *repeatSignal=[stepSignal concat:[RACSignal return:startBlock]].repeat;