Magic命令可以查看选择了哪些对象

时间:2014-05-15 00:21:21

标签: ios objective-c cocoa

我有这个可变的对象数组。这些对象属于一个名为Property的类。这是一个NSObject类,它有一个我感兴趣的属性。此属性在Property类上声明如下:

@property (readwrite, strong) NSNumber *selected;

BOOL存储在所选内容中。

现在我有了这个包含Property对象数组的可变数组。

我想知道这些对象中有多少在给定点选择了=。

好的,我可以这样做:

NSInteger count = 0;
for (Property *oneProperty in arrayProperties) {
  BOOL isSelected = [[oneProperty selected] boolValue];
  if (isSelected) count++;
}

我将发现有多少被选中,但我知道“Objective-C”有很多涉及谓词的魔术命令,objectForKey和其他类似的东西,我想知道是否有办法使用其中一个神奇的命令。

感谢。

2 个答案:

答案 0 :(得分:5)

您可以使用键值编码:

NSInteger count = [[arrayProperties valueForKeyPath:@"@sum.selected"] integerValue];

答案 1 :(得分:1)

InsertWittyName&#39的解决方案是最短的。

您可以使用的另一种方法是indexOfObjectsPassingTest方法。

在该方法中,传入应用于数组中每个对象的代码块。它创建一个NSIndexSet,其中包含代码块返回true的所有对象的索引。索引集有一个count属性。

NSIndexSet *indexes = [arrayProperties indexesOfObjectsPassingTest: 
   ^BOOL (Property aProperty, NSUInteger i, BOOL *stop) {
            return [aProperty.selected boolValue];
        }];
count = indexes.count;

(免责声明:此代码未经测试,我对使用参数和返回值的块的语法略有不同。我认为我做对了......)