你如何isEqual:在Objective-C中正确覆盖?"catch"似乎是如果两个对象相等(由isEqual:方法确定),它们必须具有相同的散列值.
" 可可基础指南"的 " 内省"部分确实有一个示例,说明如何为名为的类重写,如下所示:isEqual:MyWidget
- (BOOL)isEqual:(id)other {
if (other == self)
return YES;
if (!other || ![other isKindOfClass:[self class]])
return NO;
return [self isEqualToWidget:other];
}
- (BOOL)isEqualToWidget:(MyWidget *)aWidget {
if (self == aWidget)
return YES;
if (![(id)[self name] isEqual:[aWidget name]])
return NO;
if (![[self data] isEqualToData:[aWidget data]])
return NO;
return YES;
}
Run Code Online (Sandbox Code Playgroud)
它检查指针相等性,然后检查类相等性,最后比较使用的对象isEqualToWidget:,它只检查name和data属性.该示例未显示的是如何覆盖hash.
比方说,让我们假设有其他属性不会影响平等age.如果没有hash方法被覆盖,使得只有name和data影响哈希?如果是这样,你会怎么做?只需添加的哈希 …
是否有一个类可用于检查数组是否不包含对象?我想做点什么
if [(myarray doesntContain @"object")]
Run Code Online (Sandbox Code Playgroud)
这可能吗
我需要检查某个数组是否包含某个对象,如果是,则删除该对象.如果它没有那个对象,则可以使用函数将其添加到数组中.问题是始终添加对象,因为检查语句始终返回false.
这是我目前的功能:
- (void) myFunction:(NSString *)parameter {
if (![myMutableArray containsObject:parameter]) {
[myMutableArray addObject:parameter];
NSLog(@"%@ added", parameter);
} else {
[myMutableArray removeObject:parameter];
NSLog(@"%@ deleted", parameter);
}
}
Run Code Online (Sandbox Code Playgroud)