ios - 检查respondsToSelector 中的属性

标签 ios objective-c swift delegates selector

我有协议(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.delegatenil[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/

相关文章:

ios - UITableViewCellaccessoryView在iOS 13上有灰色背景颜色

objective-c - Cocoa/Obj-C 简单 XML 文件阅读器 - 需要帮助

ios - 如何对键的 NSArray 进行排序?

swift - 在不触发更改的情况下更新 @Binding 值

ios - 在 swift 中解析 firebase 时为零

iOS:获取应用启动时间

ios - 更改应用名称后,Facebook user_friends 权限不再返回使用该应用的 friend

ios - iOS8下CGAffineTransform Make Rotation和Auto Layout问题

swift - 使用新的 Firebase SDK 取消对 Firebase 用户的身份验证

ios - 如何在 UIStackView 中堆叠自定义 View