使用混合数据类型的属性覆盖isEqual和Hash

时间:2014-03-30 03:48:48

标签: ios objective-c hash equality nsobject

我有一个自定义类,我正在尝试检查该类的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];
    }

0 个答案:

没有答案