【发布时间】:2014-05-31 03:05:48
【问题描述】:
我有一系列符合特定协议的类。例如:
@protocol Consumable
@end
几个类之一:
@interface LivingEntity : Entity<Consumable>
...
在应用程序的其他部分,我检查对象是否为conformsToProtocol,并使用:
id<Consumable> consumable = (id<Consumable>) something;
问题是consumable 然后被移交给几个方法。如果consumable 是LivingEntity 类的实例,则其中之一需要额外的逻辑。
但是,无法检查 [consumable class] == [LivingEntity class] 是否存在。
如何查看是哪个班级?似乎协议强制转换阻止我使用 NSObject 方法。
【问题讨论】:
-
为什么没有办法检查?您可以将任何您想要的消息发送到
id。 -
xcode 显示错误,
No known instance method for selector 'class' -
问题是协议应该从
NSObject协议“继承”(是的,有这样的东西),比如@protocol P <NSObject>。那个尖括号部分可能是缺少的。当我在做的时候,你应该看看卡尔关于如何检查班级成员的答案。==可能暂时有效,但这不是公认的方式。
标签: ios objective-c