Согласно комментариям:
Вы только должны проверить наличие реализации, если
- объект является необязательным или
- вы получаете экземпляр и не знаете, реализует ли его класс протокол.
Если это так:
Прежде всего позвольте мне переписать применение De Morgan:
if(!(self.delegate && [self.delegate respondsToSelector:@selector(activity)]))
{
…
}
Я не очень понимаю это, потому что вы проверить, есть ли нет метод activity
? Обычно это наоборот, и вы хотите знать, есть ли он перед его использованием.
Однако, если это self.delegate
nil
, [self.delegate respondsToSelector:…]
будет возвращать NO
(определенное сообщение всухую поведение) и все &&
выражения будет оценивать с NO
независимо от первого условия. Поэтому бессмысленно проверять nil
.
Просто написать:
if(![self.delegate respondsToSelector:@selector(activity)])
{
// Do not use activity
}
else
{
TAActivity *activity = [self.delegate activity];
}
(я действительно хотел повернуть, что вокруг.)
Что "проверить делегата на его собственность" означает? – jtbandes
это означает, что мой делегат имеет его свойство или нет. –
Я думаю, что вы имели в виду, если (self.delegate && [self.delegate отвечает ....]), но весь смысл использования протокола заключается в том, что вам не нужно это делать , Компилятор сообщит вам, предоставит ли ваш делегат обязательные свойства. –