iOS enumerateObjectsUsingBlock 循环停止问题

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,

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值