ReactiveCocoa已经火了很久啦,而且有很多人在使用它,我所知道比较著名的有美团点评技术团队
入门级讲的简单详细清楚同时也兼具深刻的教程就是国外大神RayWenderlich的ReactiveCocoa教程啦,这里有篇中文翻译,里面有原文链接,大家可以对比着看一下。ReactiveCocoa教程
这里总结下我的阅读和学习经验:
-
RACSignal ReactiveCocoa里传递的监听的都是信号,比如监听一个名叫username的UITextField的文本编辑情况,需要对它的rac_textSignal进行监听
[[self.username.rac_textSignal subscribeNext:^(id x){ NSLog(@"%@",x)}];
监听一个UIbutton的点击事件,对相应的点击事件信号做监听
[[self.button rac_signalForControlEvents: UIControlEventTouchUpInside] subscribeNext:^(id x){
NSLog(@"button clicked") }];
如果想进行异步网络请求,或者把已存在的异步网络请求转换成ReactiveCocoa模式,可以创建一个信号
-(RACSignal *)signInSignal{
return [RACSignal createSignal: ^RACDisposable *(id<RACSubscriber> subscriber){
[HttpRequest body@{@"username":self.username.text, @"password":self.password.text} complete : ^(BOOL success){
[subscriber sendNext:@(success)];
[subscriber sendCompleted];
}];
return nil;
}];
}
然后在button点击事件里使用这个信号:
[[self.button rac_signalForControlEvents: UIControlEventTouchUpInside]
flattenMap: ^id (id x){
return [self signInSignal];
}
subscribeNext:^(id x){
NSLog(@"button clicked")
}];
-
subscribeNext [你的信号 :subscribeNext: ^(id x){}];subscribeNext就是对你提供的信号进行监听,并在随后的block里对其进行处理,你想监听某个信号,就调用subscribeNext监听它并对它进行处理。
-
Map 其实是用来转化传递的信号的值的,例如把UITextField的文本text转换成监听它的length;或者把某BOOL值转换成不同的两种颜色
RAC(self.username, backgroundColor) = [validUsernameSignal map:^id(NSNumber *usernameValid) { return [usernameValid boolValue] ? [UIColor clearColor] : [UIColor yellowColor]; }];
-
flattenMap 像上面使用到的方法,它把之前监听的信号转换成另外一个信号,并对新的信号进行监听和处理。如果在使用flattenMap的地方使用map,打印的结果会很奇怪,也可以说map还是监听原来的那个信号,只是内容有变换;但是用flattenMap监听的信号就是新的信号。
网友评论