Objective c 如何基于属性值实现相等?
我正在为我的自定义类实现Objective c 如何基于属性值实现相等?,objective-c,equality,Objective C,Equality,我正在为我的自定义类实现-isEqual:。相等性基于属性值,即如果所有属性相等,则认为对象相等。与传统的类检查一起,代码如下所示: - (BOOL) isEqual: (id) object { return [object class] == [self class] && [[object someProperty] isEqual:someProperty] && [[object otherProperty] is
-isEqual:
。相等性基于属性值,即如果所有属性相等,则认为对象相等。与传统的类检查一起,代码如下所示:
- (BOOL) isEqual: (id) object
{
return [object class] == [self class]
&& [[object someProperty] isEqual:someProperty]
&& [[object otherProperty] isEqual:otherProperty];
}
但是对于nil
属性值,这是失败的,即类中有nil
值存储在someProperty
中的两个对象被认为是不相等的,而我希望它们相等。因此,我得出了以下版本:
- (BOOL) isEqual: (id) object
{
#define equals(a, b) ((a == b) || ([a isEqual:b]))
return equals([object class], [self class])
&& equals([object someProperty], someProperty)
&& equals([object otherProperty], otherProperty);
}
这似乎很有效。这是解决平等问题的“标准”方法吗?对我来说似乎过于复杂。
isEqual:
非常特定于对象。这是语义上的平等。由您为每个类定义isEqual的含义。因此,没有标准的方法来做到这一点
最简单的实现是返回self==object
,您的第二个实现非常通用且很好,但不一定适合所有类。例如,对于一个人
,比较电子邮件就足够了,或者如果你认为一封电子邮件可以被几个家庭成员使用,那么比较电子邮件和名字就足够了。对我来说似乎太复杂了。我认为#define
解决方案实际上相当顺利:)