我有一个Square类我试图覆盖一个init方法,.m看起来像这样:
@implementation Square
{
Rectangle *rect;
}
@synthesize side;
-(int) area
{
return side * side;
}
-(int) peremiter
{
return side * 4;
}
-(id) init
{
return [self init];
}
-(Square *) initWithSide:(int)s
{
self = [super init];
if (self)
[self initWithSide:s];
return self;
}
@end
我得到的错误是在initWithSide
方法中说:
代表init
的结果必须立即返回或分配给self
答案 0 :(得分:2)
这些行:
if (self)
[self initWithSide:s];
毫无意义,基本上意味着你会一遍又一遍地调用初始化程序。您应该将其更改为执行有用的操作(例如,设置s
的值)。另外,您的无参数init
方法也是错误的。它应该是:
-(id) init {
return [super init];
}
但由于其中没有专门的实现,实际上根本不需要它。
答案 1 :(得分:1)
删除当前的init方法并用它们替换它们(不要忘记在接口范围内更新它们):
- (id)init {
if (self = [super init]) {
// do whatever you like to to do here
}
return self;
}
- (id)initWithSide:(int)s { // but an NSInteger would be more elegant, and the parameter name 's' also would be better to be like 'side'
if (self = [super init]) {
[self setSide:s];
}
return self;
}
答案 2 :(得分:0)
这是正确的语法:
- (id) initWithSide:(int)s{
self = [super init];
if (self){
//init elements
}
return self;
}