¿Hay alguna forma de comprobar el siguiente object dentro de NSArray en un bucle for..in?

Tengo este NSArray:

NSArray* temp=[[NSArray alloc] initWithObjects:@"one",@"five",@"two",nil]; for(NSString* obj in temp){ NSLog(@"current item:%@ Next item is:%@",obj, ***blank***); } 

¿Qué necesita replace en blank ? ¿Necesito saber el próximo object?

Esto solo funciona si sus objects son únicos (es decir, no hay objects idénticos en la matriz):

 id nxt = nil; int nxtIdx = [temp indexOfObject:idx] + 1; if (nxtIdx < temp.count) { nxt = [temp objectAtIndex:nxtIdx]; } NSLog(@"current item:%@ Next item is:%@", obj, nxt); 

Pero en mi opinión, este es un truco. Por qué no usar un bucle normal para el índice del object:

 for (int i = 0; i < temp.count; i++) { id obj = [temp objectAtIndex:i]; id next = (i + 1 < temp.count) ? [temp objectAtIndex:i + 1] : nil; } 

O bien ( recomendado ) enumértelo usando un bloque

 [temp enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { id next = nil; if (idx + 1 < temp.count) { next = [temp objectAtIndex:idx + 1]; } }]; 

Intente usar un NSEnumerator .

Código:

 NSEnumerator *enumerator = [temp objectEnumerator]; id obj; while (obj = [enumerator nextObject]) { if ([enumerator nextObject] == nil) { NSLog(@"This is the last object: %@", obj); break; } NSLog(@"current item:%@ Next item is:%@", obj, [enumerator nextObject]); } 

No puede hacer esto con enumeración rápida sin unas pocas líneas de código adicional (derivando el índice, agregándolo, comprobando que aún está dentro de los límites).

Podría enumerar el uso de un bloque y agregar uno al parámetro idx , pero un layout mejor (donde no se arriesgaría ni tendría que comprobar si hay excepciones fuera de límites) sería recordar el object anterior , que será nulo en su primera iteración

Puede get el índice de su object actual y mirar el siguiente con algo similar a:

 NSArray* temp=[[NSArray alloc] initWithObjects:@"one",@"five",@"two",nil]; for(NSString* obj in temp){ if([temp count] < [temp indexOfObject:obj]+1) { NSLog(@"current item:%@ Next item is:%@",obj, [temp objectAtIndex:[temp indexOfObject:obj] + 1]); } } 

A mí, a veces puede ser más fácil hacer un bucle tradicional para este caso para tener acceso a tu variable de índice.

Usando enumeración rápida, esta es la única manera:

 NSInteger index = [temp indexOfObject:obj]; if (index != NSNotFound && index < temp.count) NSObject nextObject = [temp objectAtIndex:(index + 1)]; 

Tenga en count el si, querrá asegurarse de get un índice válido, y agregarlo no lo pondrá fuera de límites.