RAC简单学习

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