检测符合协议的对象的类?

时间:2014-05-30 18:37:49

标签: ios objective-c

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

@protocol Consumable
@end

以下几个课程之一:

@interface LivingEntity : Entity<Consumable>
...

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

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

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

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

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

2 个答案:

答案 0 :(得分:8)

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

@protocol Consumable <NSObject>
...
@end

如果您想检查isKindOfClass:或其任何子类,则使用LivingEntity进行检查;如果只需要检查isMemberOfClass:,则使用LivingEntity,不包括它的子类。例如:

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

答案 1 :(得分:1)

您应该能够使用[ClassName conformsToProtocol:@protocol(ProtocolName)]来检查对象是否符合特定协议。