OC中enumerate系列方法的使用

忙里偷闲写篇小文。
开发中经常会用到遍历方法、这里主要讲一下关于iOS系统提供的enumerate的遍历方法的使用:

  1. 数组


    数组的enumerate遍历、有三种
// 遍历数组
    NSArray *array = @[@"arr-0",@"arr-1",@"arr-2",@"arr-3",@"arr-4"];
    
    // 正常遍历 enumerateObjectsUsingBlock
    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        NSLog(@"obj:%@",obj);
        
    }];
// 倒序遍历 enumerateObjectsWithOptions - NSEnumerationReverse
    [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        NSLog(@"2-obj:%@",obj);
        
    }];
// 指定某一个 enumerateObjectsAtIndexes
    NSIndexSet *set = [NSIndexSet indexSetWithIndex:0];
    
    [array enumerateObjectsAtIndexes:set options:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        NSLog(@"obj:%@---%ld",obj,idx);
        
    }];

以上是enumerate关于数组遍历的三种方式。
这里涉及到两种顺序:
NSEnumerationConcurrent 当前的排序状态
NSEnumerationReverse 倒序排列
所以、通过这个我们也可以在for-in方法中去进行倒序遍历、具体如下:

NSArray *array = @[@"arr-0",@"arr-1",@"arr-2",@"arr-3",@"arr-4"];
for(id obj in [array reverseObjectEnumerator]) {
    
        NSLog(@"倒序forin:%@",obj);
        
    }
  1. 字典


    字典的enumerate方法

具体的代码如下:

// 遍历字典
    NSDictionary *dict = @{@"key0":@"value0",
                           @"key1":@"value1",
                           @"key2":@"value2",
                           @"key3":@"value3",
                           @"key4":@"value4"};
    
    // 无序
    [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        
        // obj == value
        NSLog(@"key:%@---value:%@",key,obj);
        
    }];
    
    // 并发-无序
    [dict enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        
        NSLog(@"key:%@---value:%@",key,obj);
        
    }];

其实对于字典的这两个方法,打印的结果并没有什么区别。

3.字符串


字符串的enumerate方法
    NSString *string = @"how are you?\nI'm fine";
    //方法一
    [string enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {
        
        NSLog(@"line:%@",line);
        
    }];
    // 方法二
    [string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByWords usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
        
        NSLog(@"sub:%@",substring);
        
        
    }];
字符串的打印结果

根据上图的打印结果可以得知:
对于字符串的这两个方法而言,主要可用于文本类型的大量字符串遍历处理。并且方法一中的line是通过换行符号来区分的,这样就可以很快的对一遍文章进行分行获取。
对于方法二,其他的枚举值还有以下内容:


其他枚举类型值

以上就是对OC中enumerate系列方法的使用的一点小小的总结。希望可以对大家有所帮助。

我是姣爷、我在简书、加油!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容