NSArray *array = @[@"ff",@"uuu",@"kkkk",@"iiii",@"llll"];
__block NSString *kk = nil;
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isEqualToString:@"kkkk"]) {
kk = obj;
return;
}
NSLog(@"哈哈哈哈哈哈哈%@",obj);
}];
NSLog(@"更新之后更新之后%@",kk);
如上图所示,enumerateObjectsUsingBlock 中的return, 就相当于我们for循环中的continue;
NSArray *array = @[@"ff",@"uuu",@"kkkk",@"iiii",@"llll"];
__block NSString *kk = nil;
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isEqualToString:@"kkkk"]) {
kk = obj;
*stop = YES;
}
NSLog(@"哈哈哈哈哈哈哈%@",obj);
}];
NSLog(@"更新之后更新之后%@",kk);
如下图所示结果,*stop = YES,就相当于for 循环中的break;
NSArray *array = @[@"ff",@"uuu",@"kkkk",@"iiii",@"llll"];
NSString *kk;
for (NSString *url in array) {
if ([url isEqualToString:@"kkkk"]) {
kk = url;
break;
}
NSLog(@"哈哈哈哈哈哈哈%@",url);
}
NSLog(@"更新之后更新之后%@",kk);
有使用如上图代码测试发现,enumerateObjectsUsingBlock 中的*stop = YES和 for 循环中的的break 有一点不一样,就是
break,既会打断本次循环,又会终止后面的的循环,
而 *stop = YES,只会中断后面的循环,而不会中断本次循环
如果我们想要中断本次循环,又要中断后面的循环,需怎么处理呢
__block NSString *kk = nil;
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isEqualToString:@"kkkk"]) {
kk = obj;
*stop = YES;
return;
}
NSLog(@"哈哈哈哈哈哈哈%@",obj);
}];
NSLog(@"更新之后更新之后%@",kk);
如图,我们可以使用*stop = YES,return ,共同使用,就达到了for循环中的break 的效果
注意,一定要*stop = YES放在return 之前哦
否则如图,就相当于只有return,