我有一个类似的课程:
@interface Foo : NSObject <FooDataProvider>
...
@end
在另一个类的某个地方,我有一个带接口的方法:
-(void) doStuff:(id<FooDataProvider>)fooProvider{
...
}
然而我还有其他地方
-(void) passMeClasses:(Class)theClass
{
<do stuff based on the class>
}
通常我会像
那样将事情传递给这个方法Foo* f = [[Foo alloc] init];
...
[bar passMeClasses:[f class]];
但我不知道如何传递我只有id的东西..就像这样
id<FooDataProvider> f = [[Foo alloc] init];
....
[bar passMeClasses:[f ?????]];
或者如何从doStuff方法
执行此操作-(void) doStuff:(id<FooDataProvider>)fooProvider{
Class c = [fooProvider howDoIGetMyClass];
bar passMeClasses:c];
}
有人可以帮助我从id中确定课程吗?
很抱歉这个冗长的解释,但希望它清楚!
答案 0 :(得分:1)
[f class]
class
是一种方法。它被称为对象。该对象将返回其类(或它应该;它可以在技术上返回其他东西,有时会返回)。变量的类型在运行时完全不相关。在运行时所有对象指针都是id
。这就是为什么method signature type encodings只指定“一个物体进入这里”的原因。 (参见@
。)它们无法表达对象的特定类型。