在for循環(huán)中可以使用break斗躏、continue等關(guān)鍵字控制循環(huán)。
在使用enumerateObjectsUsingBlock遍歷的時候,怎樣跳出循環(huán)奠伪?
有的同學(xué)說 *stop = YES;
有的同學(xué)說 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);
}];
打印結(jié)果:
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);
}];
打印結(jié)果:
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);
}];
打印結(jié)果:
Before if - obj = 1
After if - obj = 1
Before if - obj = 2
After if - obj = 2
Before if - obj = 3
總結(jié):
- 只用 *stop = YES; 跳出循環(huán)Block护戳,但是本次循環(huán)需要執(zhí)行完成。
- 只用 return; 跳出本次循環(huán)Block垂睬,相當(dāng)于for循環(huán)中continue的用法媳荒。
- *stop = YES; 和 return; 連用抗悍,跳出循環(huán)Block,不執(zhí)行本次循環(huán)剩余的代碼钳枕,相當(dāng)于for循環(huán)中break的用法缴渊。