简体   繁体   English

在函数中检测break语句?

[英]Detect break statement in function?

I have the function below: 我有以下功能:

- (void)doStuff {
    BOOL allDoneNow = NO;
    for (int i = 0; i < [arABFBmatches count]; i++) {
        for (int j = 0; j < [arABFBmatches count]; j++) {
            if (should_skip_rest) {
                allDoneNow = YES;
                break;
            }
        }
        if (allDoneNow) break;
    }
}

Now, if I call that method with [self doStuff]; 现在,如果我使用[self doStuff];调用该方法[self doStuff]; , how can I detect if the function broke? ,如何检测功能是否损坏? Or is there a better way to stop and restart the execution of a function? 还是有更好的方法停止和重新开始执行函数?

- (BOOL)doStuff // <- return a boolean value
{
  for (int i = 0; i < [arABFBmatches count]; i++) 
  {
    for (int j = 0; j < [arABFBmatches count]; j++) 
    {
      if (should_skip_rest) 
      {
        return NO;   // <- NO for break
      }
    }
  }
  return YES; // <- YES for completed
}

This beaks the execution of the function. 这使函数的执行停止。 If you want to restart it, simply call it in a while loop. 如果要重新启动它,只需在while循环中调用它即可。

while( (doStuff()==NO) && thereShouldBeAnotherConditionForStopping )
{
  // Do something after each attempt, otherwise it seems to be a little bit silly
}

Or you can use blocks, like this: 或者您可以使用块,如下所示:

- (void)doStuff:(void (^)())breakBlock{
    BOOL allDoneNow = NO;
    for (int i = 0; i < [arABFBmatches count]; i++) {
        for (int j = 0; j < [arABFBmatches count]; j++) {
            if (should_skip_rest) {
                allDoneNow = YES;
                breakBlock();
                break;
            }
        }
        if (allDoneNow) breakBlock();
    }
}

and call it: 并称之为:

[self doStuff:^{
    NSLog(@"ends with break");
}];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM