NSArray заполнен объектами bool - PullRequest
6 голосов
/ 05 мая 2010

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

Ответы [ 2 ]

12 голосов
/ 05 мая 2010

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

6 голосов
/ 05 мая 2010

Как говорит Чак, используйте -[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;

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

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