请看一下这段代码:
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两个相等的对象返回相同的哈希值.
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |