2012-08-13 17 views
6

Come smettere di enumerazione veloce una volta ottenuto ciò che stai cercando.Come si ferma l'enumerazione veloce?

In un ciclo for, so che basta impostare il numero del contatore su come mille o qualcosa del genere. Esempio:?

for (int i=0;i<10;i++){ 
    if (random requirement){ 
     random code 
     i=1000; 
    } 
} 

così senza convertire l'enumerazione veloce in un tipo di circuito cosa in avanti (confrontando i per il [array count] come si può fermare un enumerazione veloce nel processo

+5

Utilizzare una istruzione 'break;'. Puoi usarli anche nei tuoi for-loop normali. – Dustin

+3

Chi ti ha detto di _impostare la variabile indice_ per fermare un ciclo 'for' ?! Dovremo sospendere la loro licenza di programmazione. –

+0

@ W'rkncacnter me stesso :( – bmende

risposta

10

from the docs

for (NSString *element in array) { 
    if ([element isEqualToString:@"three"]) { 
     break; 
    } 
} 

se si desidera terminare l'enumerazione quando viene raggiunto un determinato indice, block-based enumeration potrebbe essere migliore, poiché fornisce l'indice durante l'enumerazione:

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    //… 
    if(idx == 1000) 
     *stop = YES; 
}]; 
+0

ma i blocchi sembrano più confusi ... – bmende

+4

sono grandi e diventano sempre più importanti in Ap API ples. dovresti familiarizzare con loro. – vikingosegundo

2
for (id object in collection) { 
    if (condition_met) { 
    break; 
    } 
} 
1

Non potresti semplicemente usare un'istruzione break?

for (int x in /*your array*/){ 
    if (random requirement){ 

     random code 
     break; 
    } 
} 
1

Semplicemente aggiungendo che per i cicli annidati, un'interruzione in un ciclo interno interrompe proprio quel ciclo. I loop esterni continueranno. Se vuoi uscire completamente, puoi farlo in questo modo:

BOOL flag = NO; 
for (NSArray *array in arrayOfArrays) { 
    for (Thing *thing in array) { 
     if (someCondition) { 
      // maybe do something here 
      flag = YES; 
      break; 
     } 
    } 
    if (flag) { 
     break; 
    } 
} 
Problemi correlati