gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:23:05 25 4
gpt4 key购买 nike

请看一下这段代码:

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 告诉我这两个对象不相等。但为什么?我该怎么做才能使它们相等?

最佳答案

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

这会将传入的卡片对象的面和花色与自身进行比较,并返回适当的 BOOL 值。请参阅here有关基本 (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;
}

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

关于objective-c - 为什么以完全相同的方式定义的两个自定义对象不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8489488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com