在Objective-C中检查一个布尔值数组,看看是否至少有一个是YES

Rec*_*eel 6 arrays if-statement compare objective-c ios

我有一个可变的布尔值数组,我想检查是否有任何值为YES.

目前我正在创建另一个阵列,这个阵列总是全部都是假的;

 [MyArray addObject:[NSNumber numberWithBool:switchInput]];
 [MyAllNoArray addObject:[NSNumber numberWithBool:NO]];
Run Code Online (Sandbox Code Playgroud)

用户做了一些比特,MyArray中的一些对象可能变为YES,然后我使用下面的内容来查看是否有任何真实.

if([MyArray isEqualToArray:MyAllNoArray])
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有更好的方法(这种方式似乎很浪费)?

我考虑过一个计数器,每当其中一个对象改变时,计数器就会上升或下降(取决于改为YES或NO),如果计数器为0则数组也是如此.但我只是觉得在IF语句中可能有一个更好的方法,我错过了.

小智 11

我认为一个更简单的解决方案是:

NSArray *bools = @[@(NO),@(NO), @(YES)];
    if ([bools containsObject:@(YES)]) {
        // do your magic here
    }
Run Code Online (Sandbox Code Playgroud)

如果你只是需要检查存在,循环和块将是一种矫枉过正.

  • 真好!-仅需说明两点:1)`containsObject:`最有可能在内部使用循环,因此此方法应与显式循环一样快。2)您可以编写“ @YES”(NSNumber文字)而不是“ @(YES)”(带框的表达式)。结果是一样的。 (2认同)