在for循环中可以使用break、continue等关键字控制循环。
在使用enumerateObjectsUsingBlock遍历的时候,怎样跳出循环?
有的同学说 *stop = YES;
有的同学说 return;
那么我们看一下他们分别的作用是什么。
示例1:*stop = YES;
NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"Before if - obj = %@", obj);
if ([obj isEqualToString:@"3"]) {
*stop = YES;
}
NSLog(@"After if - obj = %@", obj);
}];
打印结果:
Before if - obj = 1
After if - obj = 1
Before if - obj = 2
After if - obj = 2
Before if - obj = 3
After if - obj = 3
示例2:return;
NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"Before if - obj = %@", obj);
if ([obj isEqualToString:@"3"]) {
return;
}
NSLog(@"After if - obj = %@", obj);
}];
打印结果:
Before if - obj = 1
After if - obj = 1
Before if - obj = 2
After if - obj = 2
Before if - obj = 3
Before if - obj = 4
After if - obj = 4
Before if - obj = 5
After if - obj = 5
示例3:*stop = YES; + return;
NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"Before if - obj = %@", obj);
if ([obj isEqualToString:@"3"]) {
*stop = YES;
return;
}
NSLog(@"After if - obj = %@", obj);
}];
打印结果:
Before if - obj = 1
After if - obj = 1
Before if - obj = 2
After if - obj = 2
Before if - obj = 3
总结:
- 只用 *stop = YES; 跳出循环Block,但是本次循环需要执行完成。
- 只用 return; 跳出本次循环Block,相当于for循环中continue的用法。
- *stop = YES; 和 return; 连用,跳出循环Block,不执行本次循环剩余的代码,相当于for循环中break的用法。