如何在Swift中全局访问新数据类型?

时间:2018-01-18 06:46:36

标签: swift xcode types global enumeration

想象一下,我们正在制作游戏。这个游戏的难度可以实时改变(游戏中期),并且可以随时使用三个始终在屏幕上的按钮进行控制。

代表此应用“状态”的Swift类型是:

enum CurrentDifficultyState {
    case low
    case medium
    case max
}

假设我们已将此代码放在ViewController中。

但是......在我们的模型中...我们有类似enemyController.swift的东西,它有一个像generateEnemy(currentDifficulty: CurrentDifficultyState)这样的成员函数。

这个敌人的“难度”将取决于它产生的那个枚举的状态。

当我们这样做的时候,XCode抱怨(从文件enemyController.swift里面)没有“CurrentDifficultyState”这样的类型,大概是因为它还没有在enemyController.swift文件中定义(它是写在ViewController文件中。)

那么......处理这个问题的正确方法是什么?我们在哪里可以将此代码移动到(或者缺少哪个关键字),以便它可以是全局(静态?)接受类型,就像StringInt ...可以访问所有类应用?

我最终做的是创建一个名为“myGlobalTypes.swift”的新swift文件并将枚举代码放在那里。

这有效!

但这似乎是一种无用的方式。

有人能开导我吗?谢谢!

PS - 请不要问更多的代码...“游戏”的事情只是一个假设的例子来给出问题的一些背景(这是一般性的)......但我没有足够的经验来问真正的问题直截了当,因为我不知道所有相关的条款。

3 个答案:

答案 0 :(得分:3)

只需将enum放在顶级范围内,无论您想要什么文件。例如,将它放在顶层(在UIViewController类之外)的enemyController.swift文件中

答案 1 :(得分:3)

在ViewController文件中:

// file start
enum currentDifficultyState {
...
}

class ViewController: UIViewController {
...
}
// file end

答案 2 :(得分:2)

将枚举放在一个单独的文件中绝不是"垃圾" - 国际海事组织,如果它是一个重要的类型,将它放在显眼的位置是件好事。

如果没有更多代码,您的原始问题很难回答。将类型放入文件并在另一个文件中使用它没有问题,只要您不将其标记为private / fileprivate并保留在同一模块中即可。我猜你把枚举放在另一个类中,在这种情况下你仍然可以在其他文件中使用它,如果你要使用完整的类型名称,例如OtherClass.currentDifficultyState

最后一个不相关的提示:世界上大约99.9%的Swift代码用大写字母开始输入类型名称,我强烈建议你遵循这个约定 - 它使得与其他程序员和外部库更加顺畅。