Ben*_*ard 3 cocoa equality objective-c nsnumber nsstring
编辑
从最初的答案来看,我不够清楚.我只是想检查我自己的自定义类的对象之间的相等性,结果取决于它的属性(我相信很标准)?我正在努力的一点是确保当两个实例的属性都为零时,属性被视为相等.
结束编辑
我想我的自定义类的对象返回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
);
}
Run Code Online (Sandbox Code Playgroud)
我试图返回YES
两个属性,nil
并避免发送isEqualToNumber
或isEqualToString
为零.
对于BOOL
s我会猜测这是不必要的,因为一个BOOL
不能nil
- ==
对于布尔人来说是否足够简单?
我缺少什么,或任何改善这种方法的方法?
既然你不能(好吧,这不是一个好主意)覆盖所有对象类型的isEquals,包括nil
,显而易见的选择就是在你需要的时候创建一个单独的简单函数;
BOOL nilEqual(id a, id b)
{
return (a == nil && b == nil) || [a isEqual:b];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2787 次 |
最近记录: |