Objective-c类扩展方法的前向声明

时间:2015-03-20 01:04:43

标签: objective-c class-extensions

以下代码产生错误'Bar'没有可见的@interface在-[Foo fooMethod]的第二行实现中声明选择器'barMethod'

//  FooBar.m

#import "FooBar.h"

//////////////////////////////////

@implementation Foo

- (void)fooMethod {
    Bar *bar = [Bar new];
    [bar barMethod]; // Error: No visible @interface for 'Bar' declares the selector 'barMethod'
}

@end

//////////////////////////////////

@interface Bar ()
- (void)barMethod;
@end

@implementation Bar

- (void)barMethod {
    // do something
}

@end

除了将-[Bar barMethod]类扩展移到Bar实现之上(有时候不是很方便)之外,有没有办法在FooBar.m中转发声明Foo

1 个答案:

答案 0 :(得分:1)

扩展程序的界面与方法可见性的任何其他界面一样:编译器必须在使用之前看到声明。*不幸的是,你必须放置{{1无论是@interface的实现还是文件中的标题或更高版本。


*我所知道的一个例外是对于根本没有在接口中命名的方法 - 基本上由它们的定义声明 - 并且在同一个Foo块中使用。无论顺序如何,编译器都会为您解决问题。