Swift:全局常量命名约定?

ma1*_*w28 58 global constants naming-conventions swift

在Swift中,似乎全局常量应该是camelCase.

例如:

let maximumNumberOfLoginAttempts = 10
Run Code Online (Sandbox Code Playgroud)

那是对的吗?

我已经习惯了所有的大写字母,例如,MAXIMUM_NUMBER_OF_LOGIN_ATTEMPTS来自C,但我想默认Swift惯例.

bmj*_*hns 66

Swift 3 API指南声明"类型和协议的名称是UpperCamelCase.其他所有内容都是lowerCamelCase".

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

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

struct LoginConstants {
    static let maxAttempts = 10
}
Run Code Online (Sandbox Code Playgroud)

像这样访问,

if attempts > LoginConstants.maxAttempts { ...}
Run Code Online (Sandbox Code Playgroud)

  • 结构的方法是史诗般的 (7认同)

Gre*_*own 24

我一直在讨论使用驼峰式案例,它具有类级常量的主要资本.例如:

static let MaximumNumberOfLoginAttempts = 10
Run Code Online (Sandbox Code Playgroud)

它仍然是驼峰式的(正如Apple似乎推荐的那样),但大写的主要角色清楚地表明价值是不可改变的.

  • @GregBrown不再是这种情况了.Swift 2.2以后使用lowerCamelCase. (7认同)

Rya*_*ney 9

为了改进bmjohns 的答案,最好使用 anenum而不是 a 来struct充当常量的命名空间。没有 case 的anenum无法实例化,而 a 则struct可以。如果它是 a struct,则LoginConstants()允许实例化它(通过 ),但这没有意义,也没有意义。

约定是使用枚举来命名空间,如下所示:

enum LoginConstants {
    static let maxAttempts = 10
}
Run Code Online (Sandbox Code Playgroud)

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


Tok*_*iku 6

Apple主张camelCase.也就是说,许多人使用_camelCase来区分它,特别是如果你可能在较低的范围内拥有相同的名称.


Hob*_*ist 5

我经常看到用a声明的常量k,如下所示:

static let kLoginAttemptsMax = value
Run Code Online (Sandbox Code Playgroud)

这也跟随骆驼套管到"T".

  • 这是一个古老的惯例,而不是苹果在Swift中使用的那个. (6认同)
  • 至少在Obj-C Apple代码中我经常看到"k"约定. (2认同)
  • “k”用于表示它是某种字典的键。例如 JSON 实体的名称。 (2认同)

sup*_*org 5

有几个选择。

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

编辑:这还取决于您的 linting/自动格式化工具。更多的想法被添加为评论。