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.字符串


OC中enumerate系列方法的使用_第1张图片
字符串的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);
        
        
    }];
OC中enumerate系列方法的使用_第2张图片
字符串的打印结果

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


OC中enumerate系列方法的使用_第3张图片
其他枚举类型值

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

我是姣爷、我在、加油!

你可能感兴趣的:(OC中enumerate系列方法的使用)