请看一下这段代码:
Card *first = [[Card alloc] initWithFace:@"Ace" andSuit:@"Hearts"];
Card *second = [[Card alloc] initWithFace:@"Ace" andSuit:@"Hearts"];
if ([first isEqual:second])
NSLog(@"Equal");
else
NSLog(@"Not equal"); //WHY???
NSLog告诉我这两个对象不相等。但为什么?我应该怎么做才能使它们平等?
答案 0 :(得分:14)
您必须在Card类中实现自己的isEqual:
方法。
这会将传入的卡片对象的面部和套装与self进行比较,并返回适当的BOOL值。有关基础(NSObject)实现以及如何修改它的更多详细信息,请参阅here。
未经测试的,键入的浏览器实现类似于:
-(BOOL)isEqual:(id)compareObject
{
if (self == compareObject)
return YES;
if (![compareObject isKindOfClass:[self class])
return NO;
Card *compareCard = (Card*)compareObject;
if ([compareCard.face isEqualToString:self.face] && [compareCard.suit isEqualToString:self.suit])
return YES;
else
return NO;
}
您还必须实现hash
,以便两个相等的对象返回相同的哈希值。
答案 1 :(得分:3)
我写这个作为另一个问题的答案,但它很好地回答了你的问题:
==
检查身份。这是两个指针是否指向同一个对象。
测试平等使用:[objectA isEqual:objectB]
。默认情况下,它与==
相同,但可以覆盖它以使其具有自定义相等性。
答案 2 :(得分:0)
“isEqual”的意思是“它们是同一个物体吗?”,它们不是。你想测试“他们有相同的价值吗?”。