我一直在使用这种方法几个小时。它应该简单地检查作为otherCards
传入的卡的属性是否等于该(自)类实例的相同属性。但我正在撕扯我的头发 - 这是假的结果
(BOOL)otherCards: (NSArray *)otherCards allHaveUnequalAttribute: (NSString *)key
{
NSArray *values = [NSArray arrayWithArray:[otherCards valueForKey:key]];
int countUnequalMatches = 0;
for (NSNumber *setValue in values) {
if (![[self valueForKey:key] isEqual:setValue]) {
countUnequalMatches++;}
}
NSLog(@"countUnequalMatches %d values count: %d", countUnequalMatches, [values count]);
if (countUnequalMatches == [values count]) return YES ?: NO;
}
它被称为:
if ([self otherCards:otherCards allHaveUnequalAttribute:CARD_SHAPE]) {
NSLog(@"All unequal");
} else {
NSLog(@"One or more card equal");
}
答案 0 :(得分:1)
应该是: if(countUnequalMatches == [otherCards count])返回YES?:NO;
因为我使用Set作为计算唯一项目的方法。
答案 1 :(得分:1)
这是谓词非常适合处理的事情。
-(BOOL)otherCards: (NSArray *)otherCards allHaveUnequalAttribute: (NSString *)key
{
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K == %@", key, [self valueForKey:key]];
NSArray *equalCards = [otherCards filteredArrayUsingPredicate:pred];
return equalCards.count == 0;
}