プロパティの値self.shape
が得られるため、単に渡すことはできません。ただし、Cocoa / ObjCのダイナマイトのおかげで、プロパティ(またはメソッド)の名前を渡して、後で結果を取得できます。
賢い(あえて言うなら、おそらく「Pythonic」でさえ)方法:
// The name of the property we're interested in.
NSString * key = @"color";
// Get the values of that property for all the Cards in the array, then
// collapse duplicates, because they'll give the same results when comparing
// with the single card.
NSSet * vals = [NSSet setWithArray:[arrayOfCards valueForKey:key]];
// Now, if the set has only one member, and this member is the same
// as the appropriate value of the card we already have, all objects
// in the array have the same value for the property we're looking at.
BOOL colorIsEqual = ([vals count] == 1 && [vals containsObject:[myCard valueForKey:key]]);
次に、メソッドは次のようになります。
- (BOOL)allOtherCards: (NSArray *)otherCards haveEqualAttribute: (NSString *)key;
ただし、関心のあるプロパティごとに実装するというDan Fの提案- (BOOL)<#property#>Equal: (NSArray *)otherCards;
は、まったく悪い考えではありません。もちろん、これらのそれぞれは、基本の「賢い」バージョンを呼び出すことができます。