2012-11-09 10 views
35

Jeśli mam NSArray i używam enumerateUsingBlock do przechodzenia przez elementy w tablicy, ale w niektórych przypadkach muszę pominąć ciało pętli i przejść do następnego elementu, czy istnieje jakiś odpowiednik continue w bloku, czy mogę bezpośrednio użyć continue ?Objective-C: `continue` w bloku wyliczania kolekcji?

Dzięki!

zmiana:

prostu chcę wyjaśnić, co chcę zrobić, to:

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

co potrzebne jest continue równowartość w bloku.

Odpowiedz

55

Blok jest bardzo podobny do anonimowej funkcji. Więc można użyć

zwrot

aby wyjść z funkcji z typem powrotu pustkę.

+0

Witam, zobacz moją aktualizację, o co mi chodziło, przepraszam za nieporozumienie. – hzxu

+3

Odpowiedź jest nadal poprawna w odniesieniu do tego, co masz na myśli. –

+3

Ok, ale czy 'return' nie jest odpowiednikiem' break' w standardowej pętli? Jeśli tak, to jaki jest odpowiednik 'kontynuuj'? 'break' całkowicie usuwa mnie z pętli, podczas gdy' continue' przeskakuje do następnej iteracji. Jak to zrobić w bloku wyliczenia? – shmim

4

Nie można użyć kontynuowania w bloku, otrzymasz error: continue statement not within a loop. użyj powrotu;

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

Użyj "kontynuuj", gdy używasz Szybkiego wyliczania, aby to zrobić.

Przykładowy kod:

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

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

    NSLog(@"%@",myThing); 

} 

i wyjście:

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 

Nie szczeniak w zasięgu wzroku.

Powiązane problemy