2010-05-04 11 views
6

Ho un NSArray pieno di bool (espresso come un numero) e ho bisogno di testare per vedere se qualche oggetto all'interno dell'array è uguale a 1. Come posso farlo?NSAray pieno di oggetti bool

+0

cosa fai intendi per oggetto bool? –

+0

post modificato per ans. domanda –

+0

Stai provando ad aggiungere un NSArray? perché non può essere fatto. –

risposta

12

BOOL non sono oggetti. Supponendo che tu intenda alcuni oggetti che rappresentano un valore booleano come NSNumber che implementa un valore corretto isEqual:, potresti semplicemente fare qualcosa come [array containsObject:[NSNumber numberWithBool:YES]].

+0

wow. Non sapevo che potesse essere usato in quel modo. Grazie!!! –

6

Come dice Chuck, utilizzare -[NSArray containsObject:[NSNumber numberWithBool:YES]]. Come un esperimento mentale, qui ci sono alcuni altri modi per raggiungere l'obiettivo ...

Si può fare questo con un NSPredicate o utilizzando la nuova API di blocchi:

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; 

Puoi anche utilizzare la codifica Key-Value, anche se non sono sicuro della relativa efficienza:

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

Questa versione KVC del bool-summing è ingegnosamente spaventosa. – Chuck

+0

@Chuck, sì, sarei solo un po 'irritato di dover leggere una di queste soluzioni in codice reale. Divertente piccolo esercizio di programmazione funzionale del cervello, però. –