7

假设我有一个 NSSet,其中包含 id<Shape> 类型的对象集合

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

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

4

1 回答 1

12

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

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

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

于 2013-01-11T10:34:56.630 回答