2010-05-04 10 views
6

Mam NSArray wypełnioną bools (wyrażone jako liczba) i muszę sprawdzać, czy każdy obiekt w tablicy jest równa 1. W jaki sposób można to zrobić?NSArray wypełnione bool obiektów

+0

co do ciebie? masz na myśli obiekt bool? –

+0

wpis edytowany do ans. pytanie –

+0

Czy próbujesz dodać ints do NSArray? ponieważ tego nie można zrobić. –

Odpowiedz

12

BOOLy nie są obiektami. Zakładając, że masz na myśli jakiś obiekt reprezentujący boolean, taki jak NSNumber, który implementuje poprawne isEqual:, możesz po prostu zrobić coś takiego jak [array containsObject:[NSNumber numberWithBool:YES]].

+0

wow. Nie wiedziałem, że można z tego skorzystać. Dzięki!!! –

6

Jak mówi Chuck, użyj -[NSArray containsObject:[NSNumber numberWithBool:YES]]. Jako eksperymentu myślowego, oto kilka innych sposobów, aby osiągnąć cel ...

Można to zrobić za pomocą NSPredicate lub korzystając z nowych bloków API:

NSArray *myArr //decleared, initialized and filled 

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

lub

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

Możesz także użyć kodowania kluczem wartości, ale nie jestem pewien jego względnej wydajności:

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

Ta wersja z kodem bool-summing jest genialnie przerażająca. – Chuck

+0

@ Chuck, tak, byłbym trochę zirytowany, musiałem przeczytać każde z tych rozwiązań w prawdziwym kodzie. Jednak zabawne małe ćwiczenia programowania mózgu. –