假设我有一个NSSet,其中包含id< Shape>
类型的对象集合。 。 。其中有CircleShape,SquareShape,HexagonalShape实例(不是真正的协议或类名)。 。
是否可以使用谓词或另一行代码返回CircleShape的所有实例?
答案 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
。