for遍歷、for in遍歷、enumerateObjectsUsingBlock遍歷的使用

廢話少說,開門見山!


遍歷常用的基本上有for 、 for in 、enumerateObjectsUsingBlock,先上代碼:
1、先用for循環(huán)創(chuàng)建一個數(shù)組

NSMutableArray *muArr = [[NSMutableArray alloc] init];
    for (int i = 0 ; i < 10; i ++) {
        [muArr addObject:[NSString stringWithFormat:@"%d",i]];
    }

用for循環(huán)進行遍歷(看起來和上面創(chuàng)建數(shù)組有點相似,但又不同),我們在循環(huán)里加了一個條件,當i==6的時候,在muArr里面加入一個字符串,此時是完全沒問題的

for (int i = 0; i < muArr.count; i ++) {
        NSString *content = [muArr objectAtIndex:i];
        NSLog(@"%@",content);
        
        if (i == 6) {
            [muArr addObject:@"cj"];
        }
    }

現(xiàn)在我們用for in來進行遍歷,然后根據(jù)條件改變muArr的原有的數(shù)據(jù),此時就會出現(xiàn)崩潰

for (NSString *str in muArr) {
        if ([str isEqualToString:@"6"]) {
            [muArr addObject:@"Annie"];
        }
    }

崩潰內(nèi)容如下:

 *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x61000004e5e0> was mutated while being enumerated.'

是不是有些納悶,怎么會崩潰呢,看到錯誤信息沒有,這個數(shù)組是個枚舉類型的,就是說,for in 遍歷是快速枚舉,我們不能在這個方法里面對數(shù)組進行增、刪、改。NSArray的枚舉操作中有一條是需要注意:對于可變數(shù)組進行枚舉操作時,不能通過添加或刪除對象等這類操作來改變數(shù)組容器,否則就會報錯。

數(shù)組還有一個系統(tǒng)自帶的方法 enumerateObjectsUsingBlock: 遍歷,代碼如下,這個方法也是簡單的遍歷,不能對數(shù)組容器進行改變的操作

[muArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if (idx == 6) {
            *stop = YES;
        }
    }];

順便贈送一個字典的遍歷:

NSDictionary *dic = @{
                          @"1":@"cj",
                          @"2":@"annie"
                          };
    [dic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        if ([key isEqualToString:@"1"]) {
            *stop = YES;
        }
    }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容