NSSet使用谓词返回与给定类匹配的对象

时间:2013-01-11 10:20:21

标签: objective-c nspredicate nsset

假设我有一个NSSet,其中包含id< Shape>

类型的对象集合

。 。 。其中有CircleShape,SquareShape,HexagonalShape实例(不是真正的协议或类名)。 。

是否可以使用谓词或另一行代码返回CircleShape的所有实例?

1 个答案:

答案 0 :(得分:12)

您可以使用基于块的谓词:

NSSet *yourSet = ...;
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    return [evaluatedObject isKindOfClass:[CircleShape class]];
}];
NSSet *filteredSet = [yourSet filteredSetUsingPredicate:pred];

这将返回CircleShape的所有实例或CircleShape的子类。如果您只想要类的实例,而不是子类的实例,请使用isMemberOfClass