數(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里對(duì)象的數(shù)據(jù)類型耻台,可以修改塊簽名诚欠,知道對(duì)象的精確類型后碳竟,編譯器就可以檢測(cè)開(kāi)發(fā)者是否調(diào)用了該對(duì)象所不具有的方法草丧,并在發(fā)現(xiàn)問(wèn)題時(shí)報(bào)錯(cuò)。
字典
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;
}
}];
使用反向遍歷莹桅,反向遍歷刪除元素后不會(huì)導(dǎo)致崩潰昌执。
這里使用了block,需要注意在block里容易引起的保留環(huán)問(wèn)題诈泼,比如使用self調(diào)用方法時(shí)懂拾,把self轉(zhuǎn)化成若引用即可打破保留環(huán)。如:__weak __typeof(self)weakSelf = self
或者 __weak MyController *weakSelf = self;
在block里使用weakSelf即可铐达。