比较isEqual中的nil属性

Ben*_*ard 3 cocoa equality objective-c nsnumber nsstring

编辑

从最初的答案来看,我不够清楚.我只是想检查我自己的自定义类的对象之间的相等性,结果取决于它的属性(我相信很标准)?我正在努力的一点是确保当两个实例的属性都为零时,属性被视为相等.

结束编辑

我想我的自定义类的对象返回YESisEqual时候它的所有属性都相同的参数传递的对象.这应该包括当两个属性nil.我最近了解到了[nil isEqual:nil]回报NO.

下面的实现会实现我想要的吗?

- (BOOL)isEqual:(id)object
    {
       if (object == self)
            return YES;
        if (!object || ![object isKindOfClass:[self class]])
            return NO;

        return (
            (!object.numberProperty && !self.numberProperty) || (object.numberProperty && self.numberProperty && [object.numberProperty isEqualToNumber:self.numberProperty])
            &&
            (!object.stringProperty && !self.stringProperty) || object.stringProperty && self.stringProperty && [object.stringProperty isEqualToNumber:self.stringProperty])
        ...etc
        );
    }
Run Code Online (Sandbox Code Playgroud)

我试图返回YES两个属性,nil并避免发送isEqualToNumberisEqualToString为零.

对于BOOLs我会猜测这是不必要的,因为一个BOOL不能nil- ==对于布尔人来说是否足够简单?

我缺少什么,或任何改善这种方法的方法?

Joa*_*son 5

既然你不能(好吧,这不是一个好主意)覆盖所有对象类型的isEquals,包括nil,显而易见的选择就是在你需要的时候创建一个单独的简单函数;

BOOL nilEqual(id a, id b)
{
    return (a == nil && b == nil) || [a isEqual:b];
}
Run Code Online (Sandbox Code Playgroud)