iOS 基于塊的遍歷方式

數(shù)組



    
        NSArray *iosArray = @[@"L", @"O", @"V", @"E", @"I", @"O", @"S"];
        
        [iosArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            
            NSLog(@"%@", obj);
            
            if ([obj isEqualToString:@"E"]) {
                
                *stop = YES;
                
            }
            
        }];

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

字典


        
        NSDictionary *dict = @{@"1":@"11", @"2":@"22", @"3":@"33"};
        
        [dict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
            
            NSLog(@"%@", obj);
            
            if ([obj isEqualToString:@"22"]) {
                
                *stop = YES;
                
            }
            
        }];

反向遍歷

        NSArray *iosArray = @[@"L", @"O", @"V", @"E", @"I", @"O", @"S"];
        
        [iosArray enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
            
            NSLog(@"%@", obj);
            
            if ([obj isEqualToString:@"E"]) {
                
                *stop = YES;
                
            }
            
        }];

并發(fā)遍歷


        NSArray *iosArray = @[@"L", @"O", @"V", @"E", @"I", @"O", @"S"];
        
        NSMutableArray *iosMutableArray = [NSMutableArray arrayWithArray:iosArray];
        
        [iosMutableArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) {
            
            obj = [NSString stringWithFormat:@"_%@", obj];
            
            [iosMutableArray replaceObjectAtIndex:idx withObject:obj];
            
            NSLog(@"%@", obj);
            
            if ([obj isEqualToString:@"_I"]) {
                
                *stop = YES;
                
            }
            
        }];

使用反向遍歷,反向遍歷刪除元素后不會導致崩潰。
這里使用了block,需要注意在block里容易引起的保留環(huán)問題,比如使用self調用方法時,把self轉化成若引用即可打破保留環(huán)。如:__weak __typeof(self)weakSelf = self或者 __weak MyController *weakSelf = self;在block里使用weakSelf即可。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容