2015-06-30 7 views
0

У меня есть функция ниже:Определить оператор break в функции?

- (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; 
    } 
} 

Теперь, если я называю этот метод с [self doStuff];, как я могу определить, если функция сломал? Или есть лучший способ остановить и перезапустить выполнение функции?

+0

В соответствии с описанным выше способом. Если значение should_skip_rest равно YES, то оба цикла будут разбиты. –

+0

Вы можете просто вернуть 'allDoneNow' (и избежать внешнего перерыва) – Alladinian

+0

Перезапустить? Чего именно вы действительно пытаетесь достичь? – Wain

ответ

1
- (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 
} 

Это замыкает выполнение функции. Если вы хотите перезапустить его, просто вызовите его в цикле while.

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

То, что я подразумеваю под «restart», это то, что если функция возвращает false, я бы хотел запустить ее снова, пока не вернет true. – user4992124

+0

Хорошо, добавляю. Вы хотите запустить его с самого начала или на месте («j», «i»), это сломалось? –

+0

Нет, с самого начала. Мне нужно это, потому что моя функция зависит от внешнего API, который иногда возвращает некоторые случайные символы. – user4992124

0

Или вы можете использовать блоки, как это:

- (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(); 
    } 
} 

и называют его:

[self doStuff:^{ 
    NSLog(@"ends with break"); 
}]; 
Смежные вопросы