7

タイプ id<Shape> のオブジェクトのコレクションを含む NSSet があるとしましょう

. . . その中には、CircleShape、SquareShape、HexagonalShape インスタンスが含まれています (実際のプロトコルまたはクラス名ではありません)。.

述語または別の 1 行のコードを使用して、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 に答える