ReactiveCocoa 学习笔记(一)
来源:互联网 发布:马尔科夫状态转移矩阵 编辑:程序博客网 时间:2024/06/13 00:29
1. subscribeNext
ReactiveCocoa signal(RACSignal)发送事件流给它的subscriber。目前总共有三种类型的事件:next、error、completed。一个signal在因error终止或者完成前,可以发送任意数量的next事件。在本教程的第一部分,我们将会关注next事件。在第二部分,将会学习error和completed事件。
2. filter 可过滤事件流
[[self.usernameTextField.rac_textSignal filter:^BOOL(id value) { NSString *text = value; return text.length > 3; }] subscribeNext:^(id x) { NSLog(@"%@", x);编译运行,在text field只能怪输入几个字,你会发现只有当输入超过3个字符时才会有log。
3. map 操作可以转换信号
[[[self.usernameTextField.rac_textSignal map:^id(NSString *text) { return @(text.length); }] filter:^BOOL(NSNumber *length) { return [length integerValue] > 3; }] subscribeNext:^(id x) { NSLog(@"%@", x); }];转换原来的输入字符串 为 字符的长度个数了, 所以打印效果如下
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) =
[validPasswordSignal
map:^id(NSNumber *passwordValid){
return
[passwordValid boolValue] ? [UIColor clearColor]:[UIColor yellowColor];
}];
RACSignal *singUpActiveSignal = [RACSignal combineLatest:@[validUserNameSignal, validPasswordSingnal] reduce:^id(NSNumber*usernameValid, NSNumber *passwordValid){ return @([usernameValid boolValue]&&[passwordValid boolValue]); }]; [singUpActiveSignal subscribeNext:^(NSNumber *signupActive) { self.signInButton.enabled = [signupActive boolValue]; }];
6. 在外部信号的subscribeNext:block里订阅内部信号
只需要把map操作改成flattenMap就可以了
下面的例子中,如果还是map 操作的话,接收到的是uibutton的点击事件流。 想要接收内部 return [self signInSignal] 这个事件流,就需要 前面 由map 改为 flattemMap.
[[[self.signInButtonrac_signalForControlEvents:UIControlEventTouchUpInside]flattenMap:^id(id x) {
return [selfsignInSignal];
}]subscribeNext:^(NSNumber *signedIn) {
BOOL success = [signedIn boolValue];
self.signInFailureText.hidden = success;
if (success) {
[selfperformSegueWithIdentifier:@"signInSuccess"sender:self];
}
}];
[[[[self.signInButton rac_signalForControlEvents:UIControlEventTouchUpInside] doNext:^(id x) { self.signInButton.enabled = NO; self.signInFailureText.hidden = YES; }] flattenMap:^RACStream *(id value) { return [self signInSignal]; }] subscribeNext:^(NSNumber *signedIn) { self.signInButton.enabled = YES; BOOL success = [signedIn boolValue]; self.signInFailureText.hidden = success; if (success) { [self performSegueWithIdentifier:@"signInSuccess" sender:self]; } }];
总结,好了,第一部分先学到这里。下面是原文链接。
- ReactiveCocoa学习笔记(一)
- ReactiveCocoa 学习笔记(一)
- ReactiveCocoa学习(一)
- ReactiveCocoa学习(一)
- ReactiveCocoa学习笔记
- ReactiveCocoa的学习笔记
- ReactiveCocoa学习笔记
- ReactiveCocoa学习笔记
- ReactiveCocoa学习教程笔记
- ReactiveCocoa & MVVM 学习总结一
- ReactiveCocoa 学习笔记 - 使用篇
- iOS学习笔记 ReactiveCocoa入门
- ReactiveCocoa 学习笔记 - 使用篇
- ReactiveCocoa<一>
- iOS学习笔记39-ReactiveCocoa入门
- [个人博客搬运]ReactiveCocoa学习笔记
- iOS学习笔记39-ReactiveCocoa入门
- reactiveCocoa学习
- Thrift初试。
- ExtJS4.2 cellclick获取单元格内容
- 罗马数字转换成整数
- js中event.keyCode用法及keyCode对照表
- 【结构体排序】hdu 2409 Team Arrangement
- ReactiveCocoa 学习笔记(一)
- 解密百度2015年5月大量网站被降权原因之站内优化
- android Internal storage 和External storage
- 基于Unity5.0系统的新打包方式
- ABBYY PDF Transformer+ 安装方法详解
- HashMap与ConcurrentHashMap的区别
- Redis学习2_在学习Redis过程中,遇到的问题汇总
- 归并排序的实现
- 华为是怎样研发的(18)——质量回溯