ReactiveCocoa 学习笔记(一)

前端之家收集整理的这篇文章主要介绍了ReactiveCocoa 学习笔记(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1. subscribeNext

ReactiveCocoa signal(RACSignal)发送事件流给它的subscriber。目前总共有三种类型的事件:next、error、completed。一个signal在因error终止或者完成前,可以发送任意数量的next事件。在本教程的第一部分,我们将会关注next事件。在第二部分,将会学习error和completed事件。

2.filter 可过滤事件流

  1. [[self.usernameTextField.rac_textSignal filter:^BOOL(id value) {
  2. NSString *text = value;
  3. return text.length > 3;
  4. }] subscribeNext:^(id x) {
  5. NSLog(@"%@",x);
编译运行,在text field只能怪输入几个字,你会发现只有当输入超过3个字符时才会有log。

3. map 操作可以转换信号

  1. [[[self.usernameTextField.rac_textSignal map:^id(NSString *text) {
  2. return @(text.length);
  3. }] filter:^BOOL(NSNumber *length) {
  4. return [length integerValue] > 3;
  5. }] subscribeNext:^(id x) {
  6. NSLog(@"%@",x);
  7. }];
转换原来的输入字符串 为 字符的长度个数了, 所以打印效果如下

2015-07-29 15:00:41.546 ReactiveCocoa_demo1[2541:975109] 4

2015-07-29 15:00:47.818 ReactiveCocoa_demo1[2541:975109] 5

4. RAC 提供的宏绑定

RAC(self.passwordTextField,backgroundColor)= @H_502_63@
[validPasswordSignal @H_502_63@
map:^id(NSNumber*passwordValid){ @H_502_63@
return [passwordValidboolValue]?[UIColorclearColor]:[UIColoryellowColor]; @H_502_63@
}]; @H_502_63@

@H_502_63@ 5.聚合信号 combineLatest: reduce:
  1. RACSignal *singUpActiveSignal = [RACSignal combineLatest:@[validUserNameSignal,validPasswordSingnal] reduce:^id(NSNumber*usernameValid,NSNumber *passwordValid){
  2. return @([usernameValid boolValue]&&[passwordValid boolValue]);
  3. }];
  4. [singUpActiveSignal subscribeNext:^(NSNumber *signupActive) {
  5. self.signInButton.enabled = [signupActive boolValue];
  6. }];

6. 在外部信号的 subscribeNext:block里订阅内部信号

只需要把map操作改成flattenMap就可以了

下面的例子中,如果还是map 操作的话,接收到的是uibutton的点击事件流。 想要接收内部 return[selfsignInSignal] 这个事件流,就需要 前面 由map 改为 flattemMap.

[[[self.signInButton rac_signalForControlEvents:UIControlEventTouchUpInside] flattenMap:^id(id x) {

return [self signInSignal];

}] subscribeNext:^(NSNumber *signedIn) {

BOOL success = [signedIn boolValue];

self.signInFailureText.hidden = success;

if (success) {

@H_403_184@ [self performSegueWithIdentifier:@"signInSuccess" sender:self];

}

}];

@H_403_208@ 7.do Next 操作 就是赋加操作, 在点击按钮的同事,想要处理一些操作 @H_502_63@ @H_403_208@ 由第6点的代码 转变为如下代码,加入了do next 操作 @H_502_63@ @H_403_208@
  1. [[[[self.signInButton rac_signalForControlEvents:UIControlEventTouchUpInside] doNext:^(id x) {
  2. self.signInButton.enabled = NO;
  3. self.signInFailureText.hidden = YES;
  4. }] flattenMap:^RACStream *(id value) {
  5. return [self signInSignal];
  6. }] subscribeNext:^(NSNumber *signedIn) {
  7. self.signInButton.enabled = YES;
  8. BOOL success = [signedIn boolValue];
  9. self.signInFailureText.hidden = success;
  10. if (success) {
  11. [self performSegueWithIdentifier:@"signInSuccess" sender:self];
  12. }
  13. }];

总结,好了,第一部分先学到这里。下面是原文链接。 @H_502_63@ @H_403_208@ cococachina主站/ios/20150123/10994.html @H_502_63@

猜你在找的React相关文章