2010-05-04 2 views
6

У меня есть NSArray, заполненный bools (выраженный как число), и мне нужно проверить, нет ли какого-либо объекта в массиве равным 1. Как я могу это сделать?NSArray, заполненный объектами bool

+0

что делать лет u означает объект bool? –

+0

сообщение отредактировано ans. question –

+0

Вы пытаетесь добавить ints к NSArray? потому что это невозможно. –

ответ

12

BOOLs не являются объектами. Предполагая, что вы имеете в виду некоторый объект, представляющий логический тип NSNumber, который реализует правильный isEqual:, вы можете просто сделать что-то вроде [array containsObject:[NSNumber numberWithBool:YES]].

+0

ничего себе. Я не знал, что это можно использовать так. Благодаря!!! –

6

Как Чак говорит, используйте -[NSArray containsObject:[NSNumber numberWithBool:YES]]. В мысленном эксперименте, вот некоторые другие пути для достижения цели ...

Вы можете сделать это с помощью NSPredicate или с использованием новых блоков API:

NSArray *myArr //decleared, initialized and filled 

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

или

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

Вы также можете использовать кодировку Key-Value, хотя я не уверен в ее относительной эффективности:

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

То, что Bool-суммирующая версия KVC искусно пугает. – Chuck

+0

@ Чак, да, я бы просто немного разозлился, чтобы прочитать любое из этих решений в реальном коде. Однако веселое функциональное программирование мозга. –

Смежные вопросы