タイプ id<Shape> のオブジェクトのコレクションを含む NSSet があるとしましょう
. . . その中には、CircleShape、SquareShape、HexagonalShape インスタンスが含まれています (実際のプロトコルまたはクラス名ではありません)。.
述語または別の 1 行のコードを使用して、CircleShape のすべてのインスタンスを返すことは可能ですか?
タイプ id<Shape> のオブジェクトのコレクションを含む NSSet があるとしましょう
. . . その中には、CircleShape、SquareShape、HexagonalShape インスタンスが含まれています (実際のプロトコルまたはクラス名ではありません)。.
述語または別の 1 行のコードを使用して、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
クラスのインスタンスのみが必要で、サブクラスのインスタンスは必要ない場合に使用します。