ReactiveCocoa (2) map,filter,fold
关于 ReactiveCocoa,首先需要了解三个概念:map,filter 和 fold。 Functional Programming with RXCollectionsOne of the key concepts of functional programming is that of a “higher-order function”. Accordingto Wikipedia,a higher-order function is a function that satisfies these two conditions: ? It outputs a function. In Objective-C,we often use blocks as functions.
Use CocoaPods to install RXCollections in your project.In yourapplication:didFinishLaunchingWithOptions: method,do some code,create the array first. NSArray *array =@[@(1),@(2),@(3)];
Map:遍历map(1,2,3)=>(1,4,9) using RXCollections:
//map NSArray *mappedArray = [array rx_mapWithBlock:^id(id each) { return @(pow([each integerValue],2)); }]; NSLog(@"%@",mappedArray); common:
NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:array.count]; for (NSNumber *number in array) { [mutableArray addObject:@(pow([number integerValue],2))]; } NSArray *mappedArray = [NSArray arrayWithArray:mutableArray]; Filter:过滤Filtering a list just returns a new list containing all of the original entries, minus the entries that didn’t return true from a test. using RXCollections:
//filter NSArray *filteredArray = [array rx_filterWithBlock:^BOOL(id each) { return ([each integerValue]%2 == 0); }]; NSLog(@"%@",filteredArray); common:
NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:array.count]; for (NSNumber *number in array) { if ([number integerValue]%2 == 0) { [mutableArray addObject:number]; } } NSArray *filteredArray = [NSArray arrayWithArray:mutableArray];
Fold:组合A simple fold can be used to combine the integer values of each member of our array to calculate their sum.
//fold NSNumber *sum = [array rx_foldWithBlock:^id(id memo,id each) { //memo : return value of the previous invocation of the block (the initial value is nil). return @([memo integerValue] + [each integerValue]); }]; NSLog(@"%@",sum); Another test:
[[array rx_mapWithBlock:^id(id each) { return [each stringValue]; }] rx_foldInitialValue:@"" block:^id(id memo,id each) { return [memo stringByAppendingString:[each stringValue]]; }];you can NSLog,is @“123”.
Conclusion:We also saw,in the last example,how we can chain operations together to get a more complex result. In fact,chaining operations together is one of the main principles of using ReactiveCocoa. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 一个配置简单却功能强大的React Koa2同构isomorphic/univer
- 为什么我的并发AJAX请求到PHP脚本/ WP REST API这么慢?
- ruby-on-rails – 为什么= javascript_include_tag:默认在
- 与C中的指针混淆了
- DirectX中的多重纹理相关技术
- c# – 我应该使用哪种类型的Visual Studio项目来创建“隐藏
- 学习关于聚合FUNCTION(count(*|fieldname))
- iphone – 在Xcode中,我是否在构建或版本下输入我的应用程序
- mac webstorm can't start git
- 用 Swift 来写命令行程序