從最初的答案比較爲零的特性,我不太清楚。我只是想檢查我自己的自定義類的對象之間的平等,結果取決於它的屬性(我相信相當標準)?我正在努力的一點是確保當兩個實例對該屬性都爲零時,將屬性視爲相等。
編輯完
我想我的自定義類的對象返回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我想這不是必須的,因爲BOOL
不能是nil
- 簡單的==
就足夠布爾值嗎?
我錯過了什麼,或者任何改善這種情況的方法?
所以,你想叫的時候一樣,返回'YES'的方法'[零someEqualityTest:無]' ? - 除此之外,是的,'BOOL'是一個原始類型,'=='按預期工作。 – 2013-08-03 14:12:02
問題是要讓'[nil isEqual:nil]'調用你的'isEqual'。 –
不,我只是想檢查[myObject isEqual:myObject],並在所有屬性匹配時返回YES。我希望這兩個屬性都不是'匹配'。 –