NSArray充满了bool对象

Mat*_* S. 6 cocoa boolean nsarray

我有一个充满bool的NSArray(表示为数字),我需要测试以查看数组中的任何对象是否等于1.我该怎么办?

Chu*_*uck 12

BOOL不是对象.假设你的意思是某个对象代表一个类似于NSNumber的布尔值来实现一个正确的isEqual:,你可以做类似的事情[array containsObject:[NSNumber numberWithBool:YES]].


Bar*_*ark 6

正如查克所说,使用-[NSArray containsObject:[NSNumber numberWithBool:YES]].作为一个思想实验,这里有一些其他方法来实现目标......

您可以使用NSPredicate或使用新块API 执行此操作:

NSArray *myArr //decleared, initialized and filled

BOOL anyTrue = [myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"boolValue == 1"]].count > 0;
Run Code Online (Sandbox Code Playgroud)

要么

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

您也可以使用键值编码,但我不确定它的相对效率:

[[myArray valueForKeyPath:@"@sum.boolValue"] integerValue] > 0;
Run Code Online (Sandbox Code Playgroud)

  • 那个bool-summing KVC版本巧妙地令人恐惧. (3认同)