Objective-C一个.h和.m中的多类定义
我有两个子类,一个有很多定制,我们称之为Foo,另一个子类只需要重写一个方法,不需要任何额外的变量,我们称之为Bar Bar将是Foo的变量之一,因此为了避免再使用两个文件(.m和.h代表Bar),我希望在Foo的.h和.m文件中接口并实现Bar 我的最大努力给了我几个编译器错误 .h文件如下所示:Objective-C一个.h和.m中的多类定义,objective-c,Objective C,我有两个子类,一个有很多定制,我们称之为Foo,另一个子类只需要重写一个方法,不需要任何额外的变量,我们称之为Bar Bar将是Foo的变量之一,因此为了避免再使用两个文件(.m和.h代表Bar),我希望在Foo的.h和.m文件中接口并实现Bar 我的最大努力给了我几个编译器错误 .h文件如下所示: #import <UIKit/UIKit.h> @interface Foo : FooSuperClass { Bar *barVariable; } @property
#import <UIKit/UIKit.h>
@interface Foo : FooSuperClass {
Bar *barVariable;
}
@property (nonatomic, retain) Bar *barVariable;
-(void) fooMethod;
@end
@interface Bar : BarSuperClass {
}
@end
#import "Foo.h"
@implementation Foo
@synthesize barVariable;
-(void) fooMethod{
//do foo related things
}
@end
@implementation Bar
- (void)barSuperClassMethodIWantToOverride{
}
@end
我意识到这类事情通常都会受到反对,但我觉得这在我的情况下是合适的。我得到的第一个错误是“条前的预期说明符限定符列表”
我做错了什么,我很确定在一个文件中可能有多个声明/定义。在声明之前,您在标题中使用了
Bar
。解决方案:将Bar
的定义放在Foo
之前。编译器只考虑它以前见过的有效类型。正如尼古拉提到的,您可以在Foo
之前声明Bar
然而,这并不总是可能的。对于其他情况,可以使用@class
向前声明类
即
@类条
告诉编译器存在一个名为Bar的类,指向Bar的指针应被视为有效。通常最好使用@class
指令。例如,如果在Bar
中声明了类型为Foo
的实例变量,会发生什么情况?
@class Bar;
@interface Foo : NSObject
{
Bar *bar;
}
@end