想象一下,我们正在制作游戏。这个游戏的难度可以实时改变(游戏中期),并且可以随时使用三个始终在屏幕上的按钮进行控制。
代表此应用“状态”的Swift类型是:
enum CurrentDifficultyState {
case low
case medium
case max
}
假设我们已将此代码放在ViewController中。
但是......在我们的模型中...我们有类似enemyController.swift的东西,它有一个像generateEnemy(currentDifficulty: CurrentDifficultyState)
这样的成员函数。
这个敌人的“难度”将取决于它产生的那个枚举的状态。
当我们这样做的时候,XCode抱怨(从文件enemyController.swift里面)没有“CurrentDifficultyState”这样的类型,大概是因为它还没有在enemyController.swift文件中定义(它是写在ViewController文件中。)
那么......处理这个问题的正确方法是什么?我们在哪里可以将此代码移动到(或者缺少哪个关键字),以便它可以是全局(静态?)接受类型,就像String
或Int
...可以访问所有类应用?
我最终做的是创建一个名为“myGlobalTypes.swift”的新swift文件并将枚举代码放在那里。
这有效!
但这似乎是一种无用的方式。
有人能开导我吗?谢谢!
PS - 请不要问更多的代码...“游戏”的事情只是一个假设的例子来给出问题的一些背景(这是一般性的)......但我没有足够的经验来问真正的问题直截了当,因为我不知道所有相关的条款。答案 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代码用大写字母开始输入类型名称,我强烈建议你遵循这个约定 - 它使得与其他程序员和外部库更加顺畅。