函数式编程思想的侵袭–ReactiveCocoa的流和序列的备忘
我们上一篇文章中用另外一个框架介绍了FRP里面的一些高阶函数。下面我们用RAC的框架来一起学习一下,FRP里面的高阶函数.
- 高阶映射Map
NSArray *array = @[ @1, @2, @3 ];
RACSequence *stream = [array rac_sequence];
[stream map:^id (id value){
return @(pow([value integerValue], 2));
}];
NSLog(@"%@",[stream array]);
NSLog(@"%@",[[[array rac_sequence] map:^id (id value){
return @(pow([value integerValue], 2));
}] array]);
- 高阶过滤filter
NSLog(@"%@", [[[array rac_sequence] filter:^BOOL (id value){
return [value integerValue] % 2 == 0;
}] array]);
- 高阶折叠fold
NSLog(@"%@",[[[array rac_sequence] map:^id (id value){
return [value stringValue];
}] foldLeftWithStart:@"最后输出的字符串是:" reduce:^id (id accumulator, id value){
return [accumulator stringByAppendingString:value];
}]);
ReactiveCocoa具有左折叠和右折叠的概念。左折叠时折叠算法将从头到尾遍历数组,反之称为右折叠。这样的命名(即左、右折叠)暗示了编程语言对列表的理解,这种概念在Objective-C中是没有的。