2010-05-04 21 views
6

Tengo un NSArray lleno de bools (expresado como un número), y tengo que probar para ver si algún objeto dentro de la matriz es igual a 1. ¿Cómo puedo hacerlo?NSArray lleno de objetos bool

+0

¿Qué haces? quieres decir con un objeto bool? –

+0

publicación editada en ans. pregunta –

+0

¿Está tratando de agregar datos a un NSArray? porque eso no se puede hacer. –

Respuesta

12

BOOL no son objetos. Suponiendo que se refiera a algún objeto que represente un valor booleano como NSNumber que implemente un isEqual:, puede hacer algo como [array containsObject:[NSNumber numberWithBool:YES]].

+0

wow. No sabía que podría usarse así. ¡¡¡Gracias!!! –

6

Como dice Chuck, use -[NSArray containsObject:[NSNumber numberWithBool:YES]]. Como un experimento mental, aquí hay algunas otras maneras de lograr el objetivo ...

Usted puede hacer esto utilizando un NSPredicate o usar la nueva API de bloques:

NSArray *myArr //decleared, initialized and filled 

BOOL anyTrue = [myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"boolValue == 1"]].count > 0; 

o

BOOL anyTrue = [myArray indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 
    if([obj boolValue]) { 
    *stop = YES; 
    } 
    return [obj boolValue]; 
}].count > 0; 

También puede usar la codificación de clave-valor, aunque no estoy seguro de su eficacia relativa:

[[myArray valueForKeyPath:@"@sum.boolValue"] integerValue] > 0; 
+3

Esa versión KVC bool-summing es ingeniosamente aterradora. – Chuck

+0

@Chuck, sí, estaría un poco molesto por tener que leer cualquiera de estas soluciones en código real. Sin embargo, fue divertido poco ejercicio de programación cerebral funcional. –

Cuestiones relacionadas