【问题标题】:Swift: Global constant naming convention?Swift:全局常量命名约定?
【发布时间】:2014-08-06 07:34:30
【问题描述】:

在 Swift 中,似乎全局常量应该是驼峰式。

例如:

let maximumNumberOfLoginAttempts = 10

对吗?

我习惯于 C 中的所有大写字母,例如 MAXIMUM_NUMBER_OF_LOGIN_ATTEMPTS,但我想默认 Swift 约定。

【问题讨论】:

  • 我也很好奇这个。如果 Apple 没有 Swift 命名指南,他们需要尽快发布。
  • C 约定在所有大写中命名宏(而不是常量)的原因是宏是一种特别危险的结构,并且能够快速扫描宏的代码非常有用,因为宏扩展在不可预见的上下文通常是导致错误的原因。我不确定命名约定是否有任何价值来区分静态类型语言中的常量和变量,并内置对不变性的支持。
  • @Ferruccio,约定起源于 C,但后来的一些语言(Python、Java)只是采用了相同的约定,也许是为了简化从 C 的转换。

标签: naming-conventions constants swift global


【解决方案1】:

Swift 3 API 指南声明“类型和协议的名称是 UpperCamelCase。其他一切都是 lowerCamelCase。”

https://swift.org/documentation/api-design-guidelines/

理想情况下,您的全局常量将位于某种结构中,即 UpperCamelCase,并且该结构中的所有属性都是 lowerCamelCase

struct LoginConstants {
    static let maxAttempts = 10
}

并像这样访问,

if attempts > LoginConstants.maxAttempts { ...}

【讨论】:

  • 使用结构的方法是史诗般的
【解决方案2】:

我一直在争论使用驼峰式大小写,并在类级常量上使用领先的大写字母。例如:

static let MaximumNumberOfLoginAttempts = 10

它仍然是驼峰式大小写(Apple 似乎建议这样做),但大写的前导字符清楚地表明该值是不可变的。

【讨论】:

  • 我非常喜欢这个答案,它仍然允许您严格遵循 camelCase,同时表明它是一个常数。
  • 前几天我刚刚意识到,这种方法也符合 Apple 的枚举值命名约定(也使用带前导大写字母的驼峰式大小写)。
  • @GregBrown 不再是这种情况。 Swift 2.2 以后使用 lowerCamelCase。
  • 谢谢 - 前几天我在阅读 Swift 3 时注意到自己。
【解决方案3】:

Apple 提倡 camelCase。 也就是说,许多人使用 _camelCase 只是为了区分它,特别是如果您可能在较低范围内使用相同的名称。

【讨论】:

    【解决方案4】:

    我经常看到用k 声明的常量,像这样:

    static let kLoginAttemptsMax = value
    

    这也跟随骆驼外壳到“T”。

    【讨论】:

    • 至少在 Obj-C Apple 代码中我经常看到“k”约定。
    • 这是一个古老的约定,Apple 不再在 Swift 中使用。
    • “k”用于表示它是某种字典的键。例如 JSON 实体的名称。
    • “k”代表“常数”,可以从 Steve McConnell 的书中读到。
    • 你的评论假设人们读过他的书,甚至知道他是谁。
    【解决方案5】:

    为了改进@bmjohns 的答案,最好使用enum 而不是struct 作为常量的命名空间。没有案例的enum 不能被实例化,而struct 可以。如果是struct,则允许实例化它(通过LoginConstants()),但这没有意义,也没有意义。

    约定是使用枚举来命名空间,例如:

    enum LoginConstants {
        static let maxAttempts = 10
    }
    

    这确保LoginConstants 的唯一有效用途是访问其静态成员。

    【讨论】:

      【解决方案6】:

      有几个选项。

      1. 使用 Apple 的命名约定为thisIsMyConstant
        • 好处:它是由 Apple 推广的,所以它是“标准”的东西。
        • 缺点:如果没有Option+Click,就无法判断某个东西是常量还是变量。
        • 旁注:Apple 并不总是正确的。在 Apple 做出改变之前,很多人都在使用 UIColor.myColor 而不是 UIColor.MyColor(),包括我在内。
      2. 使用Objective-C 样式kThisIsMyConstant。由于很多Swift 开发人员都是objc 专家,因此对于大多数Mac/iOS 开发人员来说应该很明显。
      3. 使用C 样式THIS_IS_MY_CONSTANT。它也被许多其他语言使用,例如Java
      4. 使用类似ThisIsMyConstant 的东西。目前我想不出任何使用这种风格的语言(应该有一些,但我想不起来了),但它有点接近 Apple 的建议。

      编辑:它还取决于您的 linting/autoformatting 工具。更多想法被添加为 cmets。

      【讨论】:

      • IMO 与 Apple 的约定在这里是正确的选择;它最大限度地提高了一致性。
      • 除了let foo = "bar",还有更多选项。喜欢有限的范围,可以使用private struct Const;对于共享常量,您甚至可以将常量作为依赖项注入。通过使用这些方法,可以限制使用 Apple 标准的缺点。
      【解决方案7】:

      Apple 用 camelCase 向我们展示常量。

      我使用 bether 可读变体。所以对于你的例子:

      let maximumNumberOfLoginAttempts = 10
      let MAXIMUM_NUMBER_OF_LOGIN_ATTEMPTS = 10
      

      'MAXIMUM_NUMBER_OF_LOGIN_ATTEMPTS' 对我来说是可读的,它立即显示,它是一个常量变量。

      【讨论】:

      • 更具可读性:没有。表示它是一个常数:是的。但这并不能提供 Apple 对 Swift 的最佳实践的答案。
      • Apple 的最佳实践是 camelCase。否则他们会在书中使用“caps-style”(或者我还没有看到)。但是在这样的非关键问题中,我会随心所欲——我也不必担心上下文切换错误,比如 java swift。但这只是我对此的想法。有些人可能会有不同的想法..
      • 我倾向于首先使用 Apple 约定,或者使用工作组的在职约定或为开源做出贡献。在后者中,我可能会尝试影响 Apple 大会,因为他们正在制定标准,尽管我可以理解 @Javatar 的建议(很好,顺便说一句)。
      【解决方案8】:

      您不仅可以看到苹果说了什么,还可以看到他们做了什么。

      你可以看看Foundation类,它是苹果创建的一个类,新建项目时默认导入到ViewController文件中。

      在类上按 command+optionn+clic 以查看其声明。

      image to see two swift examples from apple

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-19
        • 2016-12-23
        • 2017-04-22
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-29
        相关资源
        最近更新 更多