ios - 检测符合协议(protocol)的对象类?

标签 ios objective-c

我有一系列符合特定协议(protocol)的类。例如:

@protocol Consumable
@end

还有几个类之一:

@interface LivingEntity : Entity<Consumable>
...

在应用程序的其他部分,我检查对象是否 conformsToProtocol,并使用以下方法转换它们:

id<Consumable> consumable = (id<Consumable>) something;

问题是 consumable 然后被移交给几个方法。如果 consumableLivingEntity 类的实例,其中之一需要额外的逻辑。

但是,无法检查是否 [consumable class] == [LivingEntity class]

如何查看它是哪个类?似乎协议(protocol)转换阻止我使用 NSObject 方法。

最佳答案

假设所有符合 Consumable 的类也符合 NSObject 协议(protocol),通常意味着它们都来自 NSObject NSProxyConsumable 扩展 NSObject,允许您使用 -isKindOfClass:-isMemberOfClass: 方法:

@protocol Consumable <NSObject>
...
@end

然后,如果您想检查 LivingEntity 或其任何子类,则可以使用 isKindOfClass: 进行检查,如果需要,则可以使用 isMemberOfClass:仅检查 LivingEntity,不包括其子类。例如:

if([consumable isKindOfClass:[LivingEntity class]]) {...}

关于ios - 检测符合协议(protocol)的对象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23961323/

相关文章:

ios - 什么时候是在 UIView 子类中设置动画和添加子层的合适时间

objective-c - 如何更改表单模态视图 Controller 的位置

iphone - 如何在 iPhone 中保存带有标签的图像?

ios - TouchesBegan 未调用

ios - 零检查时访问错误

objective-c - 触摸图像并恢复触摸点的坐标

ios - EKEventStore编程Xcode iOS异步搜索

android - 为什么 Google Flutter 中底部导航栏中的类似项目的文本大小不同?

iphone - 从手机获取 safari 历史记录

ios - 在呈现 ViewController 应用程序时收到内存警告