为什么两个自定义对象以完全相同的方式定义不相等?

And*_*kha 2 cocoa objective-c

请看一下这段代码:

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???
Run Code Online (Sandbox Code Playgroud)

NSLog告诉我这两个对象不相等.但为什么?我应该怎么做才能使它们平等?

jrt*_*ton 14

您必须isEqual:在Card类中实现自己的方法.

这会将传入的卡片对象的面部和套装与self进行比较,并返回适当的BOOL值.有关基础(NSObject)实现以及如何修改它的更多详细信息,请参见此处.

未经测试的,键入的浏览器实现类似于:

-(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;
}
Run Code Online (Sandbox Code Playgroud)

您还必须实现hash两个相等的对象返回相同的哈希值.