如何在 Swift 中使新数据类型可全局访问?
How to make new data type globally accessible in Swift?
假设我们正在制作游戏。该游戏的难度可以实时(游戏中期)更改,并且可以通过屏幕上始终显示的三个按钮随时控制。
表示此应用 "state" 的 Swift 类型是:
enum CurrentDifficultyState {
case low
case medium
case max
}
假设我们已将此代码放入 ViewController。
但是......在我们的模型中......我们有像 enemyController.swift 这样的东西,它有一个像 generateEnemy(currentDifficulty: CurrentDifficultyState)
.
这样的成员函数
这个敌人的 "difficulty" 将取决于这个枚举在它生成时的状态。
但是,当我们这样做时,XCode 抱怨(从文件 enemyController.swift 内部)没有 "CurrentDifficultyState" 这样的类型,大概是因为它还没有在 enemyController.swift 文件中定义(它写在 ViewController 文件中)。
所以...处理此问题的正确方法是什么?我们可以将此代码移动到哪里(或者它缺少什么关键字),以便它将成为全局(静态?)接受类型,就像 String
或 Int
... 所有人都可以访问 类 在整个应用程序中?
我最后做的是创建一个名为 "myGlobalTypes.swift" 的新 swift 文件并将枚举代码放在那里。
这有效!
但这似乎是一种无用的方法。
谁能赐教一下?谢谢!
PS - 请不要要求更多代码...... "game" 只是一个假设的例子,为问题提供一些背景信息(这是一般性的)......但是我没有足够的经验直截了当地问真正的问题,因为我不知道所有相关术语。
只需将 enum
放在您想要的任何文件的顶级范围内。例如,将其放在顶层的 enemyController.swift 文件中(在 UIViewController
class 之外)
将枚举放在单独的文件中绝不是"trashy" -- IMO,如果它是一个重要的类型,最好将它放在显眼的地方。
如果没有更多代码,您原来的问题很难回答。只要不将类型标记为 private
/fileprivate
并留在同一个模块中,将类型放入一个文件并在另一个文件中使用它就没有问题。我猜你把枚举放在另一个 class 中,在这种情况下,如果你使用完整的类型名称,你仍然可以在其他文件中使用它,例如OtherClass.currentDifficultyState
.
最后一个不相关的提示:世界上所有 Swift 代码中大约 99.9% 的类型名称以大写字母开头,我强烈建议您遵循这个约定——它可以让您与其他程序员一起工作和外部库更流畅。
在 ViewController 文件中:
// file start
enum currentDifficultyState {
...
}
class ViewController: UIViewController {
...
}
// file end
假设我们正在制作游戏。该游戏的难度可以实时(游戏中期)更改,并且可以通过屏幕上始终显示的三个按钮随时控制。
表示此应用 "state" 的 Swift 类型是:
enum CurrentDifficultyState {
case low
case medium
case max
}
假设我们已将此代码放入 ViewController。
但是......在我们的模型中......我们有像 enemyController.swift 这样的东西,它有一个像 generateEnemy(currentDifficulty: CurrentDifficultyState)
.
这个敌人的 "difficulty" 将取决于这个枚举在它生成时的状态。
但是,当我们这样做时,XCode 抱怨(从文件 enemyController.swift 内部)没有 "CurrentDifficultyState" 这样的类型,大概是因为它还没有在 enemyController.swift 文件中定义(它写在 ViewController 文件中)。
所以...处理此问题的正确方法是什么?我们可以将此代码移动到哪里(或者它缺少什么关键字),以便它将成为全局(静态?)接受类型,就像 String
或 Int
... 所有人都可以访问 类 在整个应用程序中?
我最后做的是创建一个名为 "myGlobalTypes.swift" 的新 swift 文件并将枚举代码放在那里。
这有效!
但这似乎是一种无用的方法。
谁能赐教一下?谢谢!
PS - 请不要要求更多代码...... "game" 只是一个假设的例子,为问题提供一些背景信息(这是一般性的)......但是我没有足够的经验直截了当地问真正的问题,因为我不知道所有相关术语。
只需将 enum
放在您想要的任何文件的顶级范围内。例如,将其放在顶层的 enemyController.swift 文件中(在 UIViewController
class 之外)
将枚举放在单独的文件中绝不是"trashy" -- IMO,如果它是一个重要的类型,最好将它放在显眼的地方。
如果没有更多代码,您原来的问题很难回答。只要不将类型标记为 private
/fileprivate
并留在同一个模块中,将类型放入一个文件并在另一个文件中使用它就没有问题。我猜你把枚举放在另一个 class 中,在这种情况下,如果你使用完整的类型名称,你仍然可以在其他文件中使用它,例如OtherClass.currentDifficultyState
.
最后一个不相关的提示:世界上所有 Swift 代码中大约 99.9% 的类型名称以大写字母开头,我强烈建议您遵循这个约定——它可以让您与其他程序员一起工作和外部库更流畅。
在 ViewController 文件中:
// file start
enum currentDifficultyState {
...
}
class ViewController: UIViewController {
...
}
// file end