0

我有一个 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

4

3 回答 3

2

这些行:

if (self)
 [self initWithSide:s];

毫无意义,基本上意味着您将一遍又一遍地调用初始化程序。您应该更改它以做一些有用的事情(例如设置 的值s)。附带说明一下,您的无参数init方法也是错误的。它应该是:

-(id) init {
    return [super init];
}

但是由于其中没有专门的实现,因此您实际上根本不需要它。

于 2013-02-19T20:24:55.780 回答
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;
}
于 2013-02-19T20:46:28.587 回答
0

这是正确的语法:

- (id) initWithSide:(int)s{
   self = [super init];
    if (self){
        //init elements 
    }
    return self;
}
于 2013-02-19T20:27:53.660 回答