假设我有一个 NSSet,其中包含 id<Shape> 类型的对象集合
. . . 其中有 CircleShape、SquareShape、HexagonalShape 实例放入其中(不是真正的协议或类名)。.
是否可以使用谓词或另一行代码来返回 CircleShape 的所有实例?
假设我有一个 NSSet,其中包含 id<Shape> 类型的对象集合
. . . 其中有 CircleShape、SquareShape、HexagonalShape 实例放入其中(不是真正的协议或类名)。.
是否可以使用谓词或另一行代码来返回 CircleShape 的所有实例?
您可以像这样使用基于块的谓词:
NSSet *yourSet = ...;
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return [evaluatedObject isKindOfClass:[CircleShape class]];
}];
NSSet *filteredSet = [yourSet filteredSetUsingPredicate:pred];
这将返回 的所有实例CircleShape
或子类CircleShape
。isMemberOfClass
如果您只想要类的实例而不想要子类的实例,请使用。