2012-11-09 4 views
35

Se ho un NSArray e io uso enumerateUsingBlock per fare il ciclo degli elementi dell'array, ma in alcuni casi ho bisogno di saltare il corpo del loop e passare all'elemento successivo, c'è un equivalente continue nel blocco o posso usare continue direttamente? ?Objective-C: `continue` nel blocco di enumerazione della collezione?

Grazie!

aggiornamento:

Voglio solo chiarire, quello che voglio fare è:

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

quello che mi serve è il continue equivalente in blocco.

risposta

55

Un blocco è molto simile a una funzione anonima. Così si può utilizzare

ritorno

per uscire dalla funzione con il tipo di ritorno vuoto.

+0

Ciao, per favore vedi il mio aggiornamento per quello che intendevo, mi dispiace per l'incomprensione. – hzxu

+3

La risposta è ancora corretta per ciò che intendevi. –

+3

Ok, ma non è 'return' l'equivalente di' break' in un ciclo standard? Se è così, allora qual è l'equivalente di 'continua'? 'break' mi interrompe del tutto, mentre' continue' salta alla successiva iterazione. Come lo fai in un blocco di enumerazione? – shmim

4

Non è possibile utilizzare continua in blocco, si otterrà error: continue statement not within a loop. utilizzare il reso;

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

Utilizzare "continua" quando si utilizza l'enumerazione veloce per eseguire questa operazione.

codice di esempio:

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

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

    NSLog(@"%@",myThing); 

} 

e uscita:

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 

Non un cucciolo in vista.