【问题标题】:How do you stop fast enumeration?你如何停止快速枚举?
【发布时间】:2012-08-09 22:33:35
【问题描述】:

一旦你得到你想要的东西,你将如何停止快速枚举。

在 for 循环中,我知道您只是将计数器编号设置为 1000 或其他值。 示例:

for (int i=0;i<10;i++){
    if (random requirement){
        random code
        i=1000;
    }
}

因此,如果不将快速枚举转换为前向循环类型的事物(通过将 i 与 [array count] 进行比较,您如何在该过程中停止快速枚举?

【问题讨论】:

  • 使用break; 声明。您也可以在正常的 for 循环中使用它们。
  • 谁让你重置索引变量来停止for循环?!我们将不得不暂停他们的编程许可。
  • 哦,好吧;您现在已经完成了再教育过程,并且您的执照再次处于良好状态。欢迎回来。 /toungue-in-cheek 实际上,最好由您自己解决 - 如果您不知道 break 声明,这相当巧妙。
  • 这种方法确实没那么糟糕,因为它的工作原理类似于打破最通用的循环。
  • 我的意思是,这是最基本的。您可以将每个 for 循环编写为 while 循环。或者一个do-while循环

标签: objective-c for-loop for-in-loop fast-enumeration


【解决方案1】:

from the docs

for (NSString *element in array) {
    if ([element isEqualToString:@"three"]) {
        break;
    }
}

如果您想在达到某个索引时结束枚举,block-based enumeration 可能会更好,因为它会在枚举时为您提供索引:

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    //…
    if(idx == 1000) 
        *stop = YES;
}];

【讨论】:

  • 它们很棒并且在 Apples API 中变得越来越重要。你应该熟悉它们。
【解决方案2】:

只需为嵌套循环添加它,内部循环上的中断就会中断该循环。外循环将继续。如果你想彻底爆发,你可以这样做:

BOOL flag = NO;
for (NSArray *array in arrayOfArrays) {
    for (Thing *thing in array) {
        if (someCondition) {
            // maybe do something here
            flag = YES;
            break;
        }
    }
    if (flag) {
        break;
    }
}

【讨论】:

    【解决方案3】:

    你不能只使用一个 break 语句吗?

    for (int x in /*your array*/){
        if (random requirement){
    
            random code
            break;
        }
    }
    

    【讨论】:

      【解决方案4】:
      for (id object in collection) {
        if (condition_met) {
          break;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-12-10
        • 2016-11-12
        • 1970-01-01
        • 2020-05-19
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多