OC遍歷(官方推薦)

NSArray*iosArray =@[@"L",@"O",@"V",@"E",@"I",@"O",@"S"];

```

```

[iosArrayenumerateObjectsUsingBlock:^(id_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {

NSLog(@"%@", obj);

if([objisEqualToString:@"E"]) {

*stop =YES;

}

}];

```

參數說明:obj表示數組中的元素,idx表示元素的下標,*stop可以控制遍歷何時停止,在需要停止時令*stop = YES即可(不要忘記前面的*)。

這種方法清晰明了,數組元素,下標都可直接獲取,就連何時停止都很容易實現,break都可以退休了,遍歷字典也同樣簡單。

NSDictionary*dict =@{@"ios":@"11",@"jave":@"22",@"oc":@"33"};

[dictenumerateKeysAndObjectsUsingBlock:^(id_Nonnullkey,id_Nonnullobj,BOOL*_Nonnullstop) {

NSLog(@"key = %@", key);

NSLog(@"obj = %@", obj);

if([objisEqualToString:@"22"]) {

*stop =YES;

}

}];

若已知collection里對象的數據類型,可以修改塊簽名,知道對象的精確類型后,編譯器就可以檢測開發者是否調用了該對象所不具有的方法,并在發現問題時報錯。


NSDictionary*dict =@{@"ios":@"11",@"jave":@"22",@"oc":@"33"};

[dictenumerateKeysAndObjectsUsingBlock:^(NSString*key,NSString*obj,BOOL*_Nonnullstop) {

NSLog(@"key = %@", key);

NSLog(@"%@", obj);

if([objisEqualToString:@"22"]) {

*stop =YES;

}

}];


如代碼,直接把key和value的類型修改成NSString類型。

反向遍歷:

反向遍歷也同樣方便,調用另外一個方法即可:


NSArray*iosArray =@[@"L",@"O",@"V",@"E",@"I",@"O",@"S"];

[iosArrayenumerateObjectsWithOptions:NSEnumerationReverseusingBlock:^(NSString*obj,NSUIntegeridx,BOOL*_Nonnullstop) {

NSLog(@"%@", obj);

if([objisEqualToString:@"E"]) {

*stop =YES;

}

}];


這個方法相對于正向遍歷多了一個枚舉類型的參數NSEnumerationReverse,打開這個選項就可以反向遍歷了。

并發遍歷:

順著這個枚舉類型的參數,就會引出塊枚舉的另一大優勢:并發遍歷,參數是:NSEnumerationConcurrent,也就是可以同時遍歷collection中的幾個元素,具體數量根據系統資源而定。這樣會充分利用系統資源,高效快捷的完成collection的遍歷,系統底層會通過GCD來處理并發事宜,開發者不需要擔心內存和線程,其他方式若要實現高效的并發遍歷十分有難度。通過塊枚舉遍歷,改變collection并不會引起崩潰,代碼如下:

NSArray*iosArray =@[@"L",@"O",@"V",@"E",@"I",@"O",@"S"];

NSMutableArray*iosMutableArray = [NSMutableArrayarrayWithArray:iosArray];

[iosMutableArrayenumerateObjectsWithOptions:NSEnumerationConcurrentusingBlock:^(NSString*obj,NSUIntegeridx,BOOL*_Nonnullstop) {

obj = [NSStringstringWithFormat:@"_%@", obj];

[iosMutableArrayreplaceObjectAtIndex:idxwithObject:obj];

NSLog(@"%@", obj);

if([objisEqualToString:@"_I"]) {

*stop =YES;

}

}];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容