在swift中存储常量值的位置?

时间:2014-07-23 23:45:45

标签: ios swift

我试图在swift中构建我的第一个spritekit游戏。我不知道在哪里存储常量,所以我可以将它们提供给整个项目。我有一些C ++的经验,我曾经创建过Constants.h文件。 Swift中有这样的东西吗?建议的做法是什么?

现在我使用的是带有静态常量的结构,但我不确定它是否是正确的方法:

struct Constants {
    static let gravity : Int = 20
}

4 个答案:

答案 0 :(得分:21)

struct Constants {
    static let buildName = "Orange-Pie"

    struct FacebookConstants {
     static let clientId ="asdasdsa"
   }
    struct TwitterConstants {
     static let clientId ="asdasdsa"
   }
}

使用:

Constants.FacebookConstants.clientId

答案 1 :(得分:12)

如果你的程序的每个部分都需要非常通用的常量,这表明存在设计问题(每当你不知道应该去哪里时,你可能会遇到设计问题)。绝大多数程序都不需要像引力常数这样的东西,所以它们通常不需要是全局常量(在C ++中也是如此)。

将常量放在需要常量的东西上,或者将它们传递给需要该常量的东西。 SpriteKit应该为你做大多数重力计算,但是如果你正在做额外的物理工作,那么应该有一些物体代表物理引擎或者#34;世界。"那是重力常数所属的地方。或者,将重力常量放入一个在启动时传递给物理引擎的结构中。

即使你对引力常数有非常广泛的需求,那么你应该将它放入像PhysicalConstants这样的结构中,而不是通用的Constants(这会使代码重用很难,因为它混合了不相关的东西)。我的代码中常见的一种情况是" style"常数如"系统范围的高亮颜色" (这可能会被客户改变,所以我想要一个地方来修改它们)。这些在我的应用程序中进入名为Style.h的标题,现在将进入Style结构。但是它们与非风格常量分开。

答案 2 :(得分:4)

当我在WWDC 2014时,我向工程师询问了完全相同的事情。他们的建议是使用您的方法替换Objective-C中的#define。我同意这是一个次优的程序,实际的定义应该以某种方式实施。

另请注意,我不认为您需要明确说明变量的类型,因为Swift具有相当高级的类型推断。所以这应该有效:

struct Constants {
    static let gravity = 20
}

答案 3 :(得分:2)

struct Constants {
     static let varName = "AnyValue"
}

访问varName:

Constants.varName