【问题标题】:iOS break loop with switch带开关的 iOS 中断循环
【发布时间】:2015-09-13 18:46:20
【问题描述】:

我有一个这样的循环:

label: for(X *y in z)
    {
        switch(y.num)
        {
          case ShouldDoSomething:
            [self somethingWithX:y];
            break;
          case ShouldStopNow:
            y = [self valWhenStopped];
            break label;
        }
        [val append y];
    }

当然,由于 Objective-C 不支持循环标记(至少,当我尝试时,它会抛出一个编译错误,提示 Expected ';' after break statement),这不起作用。 有没有一种方法可以在 Objective-C 中使用 switch case 来打破循环?如果没有,具有相同效果的最佳实践是什么?

【问题讨论】:

标签: objective-c switch-statement break labeled-statements


【解决方案1】:

解决方法是将整个表达式放入一个方法中,并以 return 退出 switch 语句。

- (void)checkSomething:(id)object
{
  for(X *y in object)
  {
    switch(y.num)
    {
      case ShouldDoSomething:
        something();
        break;
      case ShouldStopNow:
        return;
        break;
    }
    somethingElse();
  }
}

另一种解决方案是使用布尔标志

for(X *y in Z)
  {
    BOOL willExitLoop = false;
    switch(y.num)
    {
      case ShouldDoSomething:
        something();
        break;
      case ShouldStopNow:
        willExitLoop = true;
        break;
    }
    if (willExitLoop) break;
    somethingElse();
  }

【讨论】:

  • 这似乎是一个答案中的两个解决方案。也许将它们分成两个答案?
  • 我更改了答案的格式以使其更清晰
  • 您仍然将答案集中在使用方法并返回,但不提供代码。然后你有点被动地说还有另一种解决方案,并为此提供代码。
  • 我编辑了代码以反映您的主要答案。希望你不要介意。
  • 我编辑了我的帖子以提供第一个解决方案的代码,我更改了第二个解决方案的代码,因为它没有按您的要求工作
【解决方案2】:

你也可以使用标志:

为了(...) { 布尔 停止 = 否; 转变(...) { 案例x: 休息 ; 案例y: 停止=是; 休息 ; } 如果 ( 停止 ) { 休息 ; } 别的东西(); }

【讨论】:

    【解决方案3】:

    我想你在找continue:

    for(X *y in Z)
    {
    switch(y.num)
    {
        case ShouldDoSomething:
            something();
            break;
        case ShouldStopNow:
            continue;  //-- this will break the switch and reenter the for loop with the next element
    }
    somethingElse();
    }
    

    【讨论】:

    • 除非会继续循环,可能会循环 1 次或多次。我希望完全停止循环。
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    相关资源
    最近更新 更多