2012-11-09 43 views
35

如果我有一個NSArray,並且我使用enumerateUsingBlock來遍歷數組中的元素,但在某些情況下,我需要跳過循環體並轉到下一個元素,是否有任何continue等效塊,或者我可以直接使用continueObjective-C:集合枚舉塊中的「繼續」?

謝謝!

更新:

只是想澄清,我想要做的是:

for (int i = 0 ; i < 10 ; i++) 
{ 
    if (i == 5) 
    { 
     continue; 
    } 
    // do something with i 
} 

什麼,我需要的是continue相當於塊。

回答

55

塊很像一個匿名函數。所以,你可以使用

回報

退出從函數的返回類型爲void。

+0

嗨,請參閱我的更新,瞭解我的意思,抱歉誤會。 – hzxu

+3

答案對你的意思是正確的。 –

+3

好的,但是在標準循環中不是'return'等價於'break'嗎?如果是這樣,那麼相當於「繼續」? 'break'完全打破了我的循環,而'continue'跳轉到下一次迭代。你在枚舉塊中如何做到這一點? – shmim

4

您不能在塊中繼續使用,您將獲得error: continue statement not within a loop。使用退貨;

[array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { 
     /* Do something with |obj|. */ 
     if (idx==1) { 
      return; 
    } 
     NSLog(@"%@",obj); 
    }]; 
7

使用快速枚舉來執行此操作時使用「繼續」。

示例代碼:

NSArray *myStuff = [[NSArray alloc]initWithObjects:@"A", @"B",@"Puppies", @"C", @"D", nil]; 

for (NSString *myThing in myStuff) { 
    if ([myThing isEqualToString:@"Puppies"]) { 
     continue; 
    } 

    NSLog(@"%@",myThing); 

} 

輸出:

2015-05-14 12:19:10.422 test[6083:207] A 
2015-05-14 12:19:10.423 test[6083:207] B 
2015-05-14 12:19:10.423 test[6083:207] C 
2015-05-14 12:19:10.424 test[6083:207] D 

不是近在眼前的小狗。