1

我是一名软件应用程序开发学生,即将进入我的最后一年,在那里我们可以自由选择语言。作为一个 Apple Fanboy——我的选择自然是 Objective-C。

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

在 Java 中,这很容易做到——尤其是考虑到你有构造函数和重载的构造函数。在 Objective C 中 - 重载和构造函数并不容易。

我意识到有一种方法可以用 init 和一些东西来做到这一点,但我仍在学习,而且很难尝试掌握 Objective C 上的一些 OOP 的窍门。

正如你所猜到的那样——我基本上是在尝试将 Java 代码移植到 Objective C 中,以便我能够按照 Apple 的方式来做事。这就是我要如何度过我的夏天。

我的问题如下:

你如何使用“重载初始化”?

我在 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 做到这一点?

我一直在绞尽脑汁想弄明白——我还是个使用 Objective C 和软件的新手,所以请保持温柔。

感谢你们。

4

1 回答 1

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。

于 2013-06-12T16:41:09.823 回答