在Objective C中创建一个垄断命令游戏

时间:2013-06-12 15:12:15

标签: objective-c arrays oop constructor overloading

我是一名软件应用程序开发专家,进入最后一年,我们可以自由选择语言。作为Apple Fanboy - 我的选择自然就是Objective-C。

作为一名学生 - 我们都学习了Java和我们的OOP模块:我们必须建立一个基于文本的垄断游戏。

在Java中很容易做到 - 特别是考虑到你有构造函数和重载构造函数。在Objective C中 - 重载和构造函数并不那么容易。

我意识到有一种方法可以用init和其他东西来做,但我还在学习,并且很难尝试在Objective C上获得一些OOP。

正如您所猜测的那样 - 我正在尝试基本将Java代码移植到Objective C,以便在Apple Way上完成工作。这就是我要度过夏天的方式。

我的问题如下:

你如何使用“重载的内容”?

我在java中垄断的主板是一个数组,但是重载的构造函数作为填充这些数组的对象:

public void board(){ //method to initialise the property objects

    board [0] = new Extras  ("Go",200,5);
    board [1] = new Property("Old Kent",80,6,0);
    board [2] = new Property("White Hall",100,10,0);
    board [3] = new Property("Fleet Street",120,12,0);

还 - 你如何使用NSArray / MutableArray做到这一点?

我一直在破坏我的大脑试图解决它 - 我仍然是一个目标C和软件的新手所以请温柔。

谢谢你们。

1 个答案:

答案 0 :(得分:2)

在Property类中,添加一个新的初始值设定项:

// designated initializer
- (id)initWithName:(NSString *)name price:(int)price rent:(int)rent
{
    self = [super init];
    if (self) {
        // Set your ivars here (e.g. _name = name;)
    }
    return self;
}

在初始化程序中,您应该始终调用超类的指定初始值设定项,检查它是否成功,如果是,则编写自己的逻辑。然后,您可以添加调用此方法的便捷初始化程序:

- (id)init
{
    return [self initWithName:@"" price:0 rent:0];
}

在这种情况下,您可以调用自己的指定的初始化程序。

正如Richard J. Ross在评论中所提到的,你可以使用addObject:将对象添加到NSMutableArray。

NSMutableArray *board = [[NSMutableArray alloc] init];
[board addObject: [[Property alloc] initWithName:@"Old Kent" price:80, rent:6]];
// and so on

您无法将对象添加到不可变的NSArray中。