以下代码产生错误'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
?
答案 0 :(得分:1)
扩展程序的界面与方法可见性的任何其他界面一样:编译器必须在使用之前看到声明。*不幸的是,你必须放置{{1无论是@interface
的实现还是文件中的标题或更高版本。
*我所知道的一个例外是对于根本没有在接口中命名的方法 - 基本上由它们的定义声明 - 并且在同一个Foo
块中使用。无论顺序如何,编译器都会为您解决问题。