我有一系列符合特定协议的类。例如:
@protocol Consumable
@end
以下几个课程之一:
@interface LivingEntity : Entity<Consumable>
...
在应用程序的其他部分,我检查对象是否conformsToProtocol
,并使用以下方式投射它们:
id<Consumable> consumable = (id<Consumable>) something;
问题是consumable
随后被移交给了几种方法。如果consumable
是LivingEntity
类的实例,则其中一个需要额外的逻辑。
但是,无法检查是否[consumable class] == [LivingEntity class]
。
如何查看它是哪个类?似乎协议强制转换阻止我使用NSObject
方法。
答案 0 :(得分:8)
假设所有符合Consumable
的类也符合NSObject
协议,通常意味着它们都来自NSObject
或NSProxy
,请Consumable
扩展NSObject
,允许您使用-isKindOfClass:
和-isMemberOfClass:
方法:
@protocol Consumable <NSObject>
...
@end
如果您想检查isKindOfClass:
或其任何子类,则使用LivingEntity
进行检查;如果只需要检查isMemberOfClass:
,则使用LivingEntity
,不包括它的子类。例如:
if([consumable isKindOfClass:[LivingEntity class]]) {...}
答案 1 :(得分:1)
您应该能够使用[ClassName conformsToProtocol:@protocol(ProtocolName)]来检查对象是否符合特定协议。