编辑
从最初的答案来看,我还不够清楚。我只想检查我自己的自定义类的对象之间的相等性,结果取决于它的属性(我相信很标准)?我正在努力解决的问题是确保当两个实例的属性都为零时,该属性被视为相等。
结束编辑
我希望自定义类的对象在其所有属性与作为参数传递的对象的属性相同时返回YES
。isEqual
这应该包括两个属性都是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
);
}
我试图YES
在两个属性都返回nil
并且避免发送isEqualToNumber
或isEqualToString
为零时返回。
对于BOOL
s 我猜这是没有必要的,因为 aBOOL
不可能nil
- 一个简单==
的布尔值就足够了吗?
我遗漏了什么,或者有什么方法可以改善这一点?