如何合并来自不同类的信息

时间:2015-06-17 19:08:42

标签: ios swift

在Swift中,我正在尝试构建一个运行纸牌游戏大战的简单应用程序。有两个视图控制器,一个用于正常游戏,一个用于平局。所以,在我的代码中,我有两个不同的类,一个叫做mainScene,另一个叫做tieScene。为了存储玩家拥有的牌以及敌人拥有的牌,我使用两个名为playerArray和敌人阵列的阵列。如果出现平局,我会从mainScene转到tieScene。如何从类mainScene中加入playerArray和enemyArray的信息,并在类tieScene中使用这些值?

我尝试过的一件事是将tieScene子类化为mainScene的一部分,如下所示:

 class tieScene: mainScene {...}

这允许我在类tieScene中使用playerArray和enemyArray。但是,当我将tieScene子类化时,在Interface Builder中将tieScene连接到我的第二个视图控制器的选项不存在。

所以,我有两个问题:

  1. 我是否将tieScene子类化错误,这就是我无法在界面构建器中连接tieScene的原因吗?

  2. 除了子类化外,我如何使用另一个班级中某个班级的信息?

3 个答案:

答案 0 :(得分:0)

我不认为您正在理解子类是什么。如果您正在进行子类化,那么这只意味着子类具有与超类相同的属性,因此它将拥有数组,但它们不会持久存在。

您可以使用几种方法,最简单的方法是在绑定视图中创建数组,然后在创建新的平局视图时,设置数组。或者创建一个方法来使用数组设置tie视图(initWithEnemyArray .....)

答案 1 :(得分:0)

你不应该像这样使用子类,子类不用于共享信息,这是对面向对象的误用。它不起作用,因为当你的程序运行时,你将有一个单独的tieScene类型实例和另一个mainScene实例。因此,您将拥有两个单独的数据实例,而不是一个共享的实例。您应该考虑制作模型类并将数据存储在那里。阅读MVC。

关于OOP和继承,请确保您了解类和类实例之间的区别。你混淆了认为一个实例和一个类是同一个东西,它们不是。

答案 2 :(得分:0)

这是OOP 101的东西。

子类化不共享信息。

汽车和卡车都是机动车

轿车和轿跑车都是汽车的子类。假设两者都有一台带有广播电台属性的广播。

如果我更换了我的轿车实例中的广播电台,那并不意味着您可以查询您的轿跑车中的广播电台并找出我正在收听的电台。

单独的对象彼此完全分离,并拥有自己的实例变量。

您可以在两个对象之间建立链接并定义协议以在它们之间进行通信,或者如果要保存全局应用程序状态信息,则可能需要数据容器单例。请参阅我为讨论不同选项而创建的这个主题:

How do you share data between view controllers and other objects in Swift?