在 respondsToSelector 中检查 属性

Check property in respondsToSelector

我有协议

@protocol ListPickerCellDelegate <NSObject>
@property (nonatomic, strong) TAActivity *activity;
@end

我想检查委托 属性。我该怎么做?

我的代码,不知道行不行

if (!self.delegate || ![self.delegate respondsToSelector:@selector(activity))]) {

}

只需检查 activity 是否为 NULL

根据评论:

如果

,您只需检查实现是否存在
  • 属性可选
  • 你得到一个实例,但不知道它 class 是否实现了协议。

如果是这样的话:

首先让我重写这个应用De Morgan:

if(!(self.delegate && [self.delegate respondsToSelector:@selector(activity)]))
{
   …
}

这个我不是很懂,因为你检查一下,有没有没有方法activity?通常它是相反的,你想知道它是否在使用它之前就存在。

但是,如果 self.delegatenil[self.delegate respondsToSelector:…] 将 return NO(定义为 nil 行为的消息)和整个 && 表达式将计算为 NO 而不管第一个条件。所以检查 nil.

是没有意义的

随便写:

if(![self.delegate respondsToSelector:@selector(activity)])
{
   // Do not use activity
}
else 
{
  TAActivity *activity = [self.delegate activity];
}

(我真的会扭转局面。)