2015-06-30 46 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,那麼for循環都會中斷。 –

+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

我的意思是'重新啓動'是,如果函數返回一個假,我想再次運行它,直到它返回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"); 
}];