EDITСравнивая нильполугруппы свойства в IsEqual
Из первоначальных ответов, я не был достаточно ясен. Я просто хочу проверить равенство между объектами моего собственного пользовательского класса, а результат зависит от его свойств (довольно стандартный, я считаю)? Бит, с которым я изо всех сил стараюсь, чтобы свойство считалось равным, когда оба экземпляра имеют нуль для этого свойства.
END EDIT
Я хочу, чтобы объекты моего пользовательского класса, чтобы вернуться 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
с я предположил бы, что это не обязательно так как BOOL
не может быть nil
- будет простым ==
хватает для булевых?
Все, что у меня отсутствует, или какие-либо способы улучшить это?
Так что вы хотите метод, который возвращает 'YES' при вызове как' [ноль someEqualityTest: ноль] ' ? - Кроме того, да, 'BOOL' является примитивным типом,' == 'работает так, как ожидалось. –
Проблема заключалась бы в том, чтобы получить '[nil isEqual: nil]' даже для вызова вашего 'isEqual'. –
Нет, я просто пытаюсь проверить [myObject isEqual: myObject] и вернуть YES, когда все свойства совпадают. Я хочу, чтобы оба свойства были nil, чтобы быть «совпадением». –