首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在respondsToSelector中检查属性

在respondsToSelector中检查属性
EN

Stack Overflow用户
提问于 2015-09-01 20:14:05
回答 2查看 1.3K关注 0票数 0

我有协议

代码语言:javascript
复制
@protocol ListPickerCellDelegate <NSObject>
@property (nonatomic, strong) TAActivity *activity;
@end

我想检查它的属性的委托。canI是怎么做到的?

我的代码,不确定还行吗

代码语言:javascript
复制
if (!self.delegate || ![self.delegate respondsToSelector:@selector(activity))]) {

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-01 20:37:28

根据评论意见:

您只需检查实现是否存在,如果

  • 属性是可选的,或者
  • 您将得到一个实例,并且不知道它的类是否实现了协议。

如果是这样的话:

首先,让我重写这个应用德摩根

代码语言:javascript
复制
if(!(self.delegate && [self.delegate respondsToSelector:@selector(activity)]))
{
   …
}

我真的不明白这一点,因为你检查,有没有方法activity?通常情况下,它是相反的,你想知道,它是否在使用之前存在。

但是,如果self.delegatenil,则[self.delegate respondsToSelector:…]将返回NO (定义为零行为的消息),并且不管第一个条件如何,整个&&表达式都将计算为NO。因此,检查nil是没有意义的。

只需写:

代码语言:javascript
复制
if(![self.delegate respondsToSelector:@selector(activity)])
{
   // Do not use activity
}
else 
{
  TAActivity *activity = [self.delegate activity];
}

(我真的会扭转这种局面。)

票数 2
EN

Stack Overflow用户

发布于 2015-09-01 20:30:34

只需检查activity是否为空

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32340135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档