我有一系列符合特定协议(protocol)的类。例如:
@protocol Consumable
@end
还有几个类之一:
@interface LivingEntity : Entity<Consumable>
...
在应用程序的其他部分,我检查对象是否 conformsToProtocol
,并使用以下方法转换它们:
id<Consumable> consumable = (id<Consumable>) something;
问题是 consumable
然后被移交给几个方法。如果 consumable
是 LivingEntity
类的实例,其中之一需要额外的逻辑。
但是,无法检查是否 [consumable class] == [LivingEntity class]
。
如何查看它是哪个类?似乎协议(protocol)转换阻止我使用 NSObject
方法。
最佳答案
假设所有符合 Consumable
的类也符合 NSObject
协议(protocol),通常意味着它们都来自 NSObject
或 NSProxy
,Consumable
扩展 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/