Objective c 使用extern@class添加类别?

Objective c 使用extern@class添加类别?,objective-c,class,import,extern,Objective C,Class,Import,Extern,是否有一种方法可以“保证类存在于其他地方”(即类似于),从而避免使用#import语句 下面是我正在尝试做的一个例子: extern @class MyClass; @interface Foo : NSObject @property (nonatomic) MyClass *abc; @end 其中肯定存在MyClass,并且在我的整个程序中使用,但在我创建此文件时,我不知道定义了MyClass的文件的名称 更新:错误似乎与这是一个类别有关。更新代码如下: @class MyClass;

是否有一种方法可以“保证类存在于其他地方”(即类似于),从而避免使用
#import
语句

下面是我正在尝试做的一个例子:

extern @class MyClass;

@interface Foo : NSObject
@property (nonatomic) MyClass *abc;
@end
其中肯定存在
MyClass
,并且在我的整个程序中使用,但在我创建此文件时,我不知道定义了
MyClass
的文件的名称

更新:错误似乎与这是一个类别有关。更新代码如下:

@class MyClass;

@interface MyClass (Extensions)
- (void)foo;
@end
给出以下错误:

无法为未定义的类“MyClass”定义类别

只需执行以下操作即可“正向声明”类:

@class MyClass;
但是,当您实际使用该类时,仍然需要导入标题

但是,在为类生成子类或添加类别时,必须使用导入。编译器必须能够看到真实的类才能修改或扩展它

“扩展”一个不能直接导入到文件中的类的唯一选项是在运行时使用objective-c运行时库修改该类。您可以创建另一个类,然后在运行时将该类中的方法添加到实际类中

基本上,您可以使用NSClassFromString获取类,然后使用将这些方法添加到实际类中


这几乎可以肯定对于您想做的任何事情来说都是多余的。

是的,这正是
@class
指令的目的(没有
extern
部分)。

@class似乎只有在同一个文件中定义了类时才起作用。@senseal:不,它会在不知道文件的情况下起作用。甚至可能是项目中不存在的类。看起来它可能是特定于实现类别的。更新了问题以反映这一点。@类似乎仅在同一文件中定义的情况下才起作用。那么,它可能是特定于实现类别的。更新了问题以反映这一点。是的,您不能将子类或类别添加到前向声明的类中。@Senseful我添加了一个简短的说明,说明了您实现与所需接近的目标的唯一方法。(向一个直到运行时才知道其存在的类添加方法)。我在下面的回答中添加了方法,但你不能为类别转发声明,因为编译器必须能够看到要添加到其中的真实类。杜德,你完全改变了问题。@Chuck:是的,它不允许我删除它,这就解决了误解。