enumerateObjectsUsingBlock 使用 方法 iOS

本文介绍如何使用Objective-C中的block来遍历NSMutableArray,并将遍历到的对象转换后存储到新的NSMutableArray中。通过示例代码展示了如何从原始对象中提取特定属性并构造新的字典对象。

  


  //创建这个数组是接受的可变数组

    NSMutableArray *arr = [NSMutableArray array];


    [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

       

        //数组要在这里实例化

        allmArray =[[NSMutableArray alloc] init];

       

        //创建一个alldic(可变字典)保存 (obj 遍历 arr)对象的值

        NSMutableDictionary *dic = obj;

        NSMutableDictionary *allDic = [NSMutableDictionary dictionary];

        

        //创建 key 保存 obj 里面的值

        [allDic setObject:[dic valueForKey:@"取出 obj 里面的 key 1"] forKey:

         @"要保存的 key 1"];

        [allDic setObject:[dic valueForKey:@"取出 obj 里面的 key 2"] forKey:

         @"要保存的 key 2"];

        

        //(可变数组)保存遍历之后的值

        [allmArray addObject:allDic];

        

    }];


iOS开发中,虽然没有像Java中那样标准的`Stream` API,但在不同的场景下有类似流式处理的概念和实现方式,下面从不同方面介绍iOS环境下类似Stream的使用: ### Foundation框架中的集合操作 在Foundation框架里,`NSArray`、`NSSet`等集合类提供了一些方法可以实现类似流式处理的功能。例如对数组进行过滤和映射操作: ```objc #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSArray *numbers = @[@1, @2, @3, @4, @5]; // 过滤出偶数 NSArray *evenNumbers = [numbers filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) { NSNumber *number = (NSNumber *)evaluatedObject; return number.integerValue % 2 == 0; }]]; // 对每个元素乘以2 NSMutableArray *multipliedNumbers = [NSMutableArray array]; [evenNumbers enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { NSNumber *number = (NSNumber *)obj; [multipliedNumbers addObject:@(number.integerValue * 2)]; }]; NSLog(@"Original numbers: %@", numbers); NSLog(@"Even numbers: %@", evenNumbers); NSLog(@"Multiplied numbers: %@", multipliedNumbers); } return 0; } ``` ### RxSwift中的Observable RxSwift是一个在iOS开发中广泛使用的响应式编程框架,`Observable`可以看作是一种流式处理的实现。以下是一个简单的示例: ```swift import RxSwift let disposeBag = DisposeBag() let numbers = Observable.from([1, 2, 3, 4, 5]) // 过滤出偶数 let evenNumbers = numbers.filter { $0 % 2 == 0 } // 对每个元素乘以2 let multipliedNumbers = evenNumbers.map { $0 * 2 } multipliedNumbers.subscribe(onNext: { number in print(number) }).disposed(by: disposeBag) ``` ### Combine框架 Combine是Apple推出的用于响应式编程的框架,提供了强大的流式处理能力。示例如下: ```swift import Combine let numbers = (1...5).publisher // 过滤出偶数 let evenNumbers = numbers.filter { $0 % 2 == 0 } // 对每个元素乘以2 let multipliedNumbers = evenNumbers.map { $0 * 2 } let subscription = multipliedNumbers.sink { value in print(value) } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值