我有一个自定义类,我正在尝试检查该类的2个对象是否相等。我尝试使用isEqual和' =='测试它的方法,但即使对象相同,它们都返回false。
假设我有一个名为MyClass的类,它有一些属性:
的 MyClass.h 的
typedef enum : NSUInteger
{
black = 0,
white = 1,
red = 2,
blue = 3
} Color;
typedef enum : NSUInteger
{
ModelA = 0,
ModelB = 1,
ModelC = 2
} ModelType;
@interface MyClass : NSObject
@property (nonatomic, assign) Color color;
@property (nonatomic, assign) ModelType model;
@property (nonatomic, copy) NSString *name;
@end
的 MyClass.m 的
@implementation MyClass
- (id)init
{
self = [super init];
if (self)
{
self.color = White;
self.model = ModelA;
}
return self;
}
- (BOOL)isEqual:(NSObject *)object
{
MyClass *filter = (MyClass *)object;
return [self.name isEqualToString:object.name] && self.color == object.color &&
self.model == object.model;
}
- (NSUInteger)hash
{
return [self.name hash] ^ [self.color hash] ^ [self.model hash];
}
@end
的问题: 的
这会在哈希方法上抛出bad receiver type 'Color'
错误。我猜它是因为我试图用整数做一个字符串的异或?我正在做哈希逻辑吗?如何创建字符串和整数的哈希?
的解决方案: 的
我能够弄清楚问题是什么。这是解决方案:
- (NSUInteger)hash
{
return [self.name hash] ^ [[NSNumber numberWithInt:self.color] hash] ^ [[NSNumber numberWithInt:self.model] hash];
}