加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ReactiveCocoa (2) map,filter,fold

发布时间:2020-12-15 04:55:38 所属栏目:百科 来源:网络整理
导读:关于 ReactiveCocoa,首先需要了解三个概念:map,filter 和 fold。 Functional Programming with RXCollections One of the key concepts of functional programming is that of a “higher-order function”. Accordingto Wikipedia,a higher-order functi

关于 ReactiveCocoa,首先需要了解三个概念:map,filter 和 fold。

Functional Programming with RXCollections

One 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 takes one or more functions as input.

? 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:组合

it combines each entry in a list down to a single value. For this reason,it’s often referred to as “combine”.

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读