RAC ( ReactiveCocoa ) 我的理解一句话概括就是: 把OC的一些麻烦的实现用 Block块解决 或者说 是通知和block的结合
先看个简单的列子 KVO 用RAC实现
{
NSString *username;
}
[RACObserve(self, username) subscribeNext:^(NSString *newName) {
NSLog(@"%@", newName);
}];
//只要你的username有变化。都可以打印出来
例如下面这个代码块 用到了filter 就是过滤器的意思 指定只有以j开头的username能通过 然后才会打印 否则不打印
[[RACObserve(self, username)
filter:^(NSString *newName) {
return [newName hasPrefix:@"j"];
}]
subscribeNext:^(NSString *newName) {
NSLog(@"%@", newName);
}];
还有个map的代码块 就是映射 对数据进行一些操作 改变值等
map:^id(id value) {
return @([value[0] length] > 0 && [value[1] length] > 5);
}
以最少的代码实现一个时钟应用
设置一个间隔为一秒。从现在开始调用的函数。并把当前实际传入。 这个函数返回一个NSString。 然后把这个NSString和界面上的textField绑定在了一起。从而实现时钟程序。表现了流和绑定响应
RAC(self, timeLabel.text) = [[[RACSignal interval:1 onScheduler:[RACScheduler currentScheduler]] startWith:[NSDate date]] map:^id (NSDate *value) {
NSLog(@"value:%@", value);
NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit fromDate:value];
return [NSString stringWithFormat:@"%02ld:%02ld:%02ld", (long)dateComponents.hour, (long)dateComponents.minute, (long)dateComponents.second];
}];
flattenMap: 先 map 再 flatten
合并combineLatest concat merge then 都能合并
详细看下demo吧 看运行结果说话
https://github.com/ongfei/RACDemo
另外附上一个博客 http://blog.csdn.net/xdrt81y/article/details/30624469