我有这个可变的对象数组。这些对象属于一个名为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
和其他类似的东西,我想知道是否有办法使用其中一个神奇的命令。
感谢。
答案 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;
(免责声明:此代码未经测试,我对使用参数和返回值的块的语法略有不同。我认为我做对了......)