我有协议(protocol)
@protocol ListPickerCellDelegate <NSObject>
@property (nonatomic, strong) TAActivity *activity;
@end
我想检查委托(delegate)的属性。我该怎么做?
我的代码,不确定是否可以
if (!self.delegate || ![self.delegate respondsToSelector:@selector(activity))]) {
}
最佳答案
根据评论:
您只需检查该实现是否存在,如果
- 该属性是可选的或
- 你得到一个实例,但不知道它的类是否实现了该协议(protocol)。
如果是这种情况:
首先让我重写这个应用 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];
}
(我真的会扭转这一局面。)
关于ios - 检查respondsToSelector 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32340135/