为什么在Swift中使用关键字"let"声明常量?

the*_*min 13 xcode swift

标题说明了一切......为什么在Swift中用关键字"let"声明一个常量?

可能对这个noob问题有一个简单的答案,但我找不到它.

编辑:好的,只是为了让问题更加清晰.我知道它需要用某个名称进行初始化,但我认为可能有一个更深层的含义,它来源于它的来源?像"func"这样的其他东西对我来说似乎很合乎逻辑,所以我想知道"让"的深层含义是什么.

Ant*_*nio 13

实际上在swift中没有恒定变量的概念.

常量是在编译时解析的表达式.例如,在目标C中,此代码:

const NSString *string = [[NSString alloc] init];
Run Code Online (Sandbox Code Playgroud)

导致编译错误,说明这一点Initializer element is not a compile-time constant.原因是它NSString在运行时被实例化,因此它不是编译时常量.

在swift中,最接近的是不可变变量.差异可能不明显,但不可变不是常数,它是一个可以动态初始化一次但之后无法修改的变量.因此,编译时评估不是必需的,也不是必需的 - 虽然它经常发生,我们使用不可变作为常量:

let url = "http://www.myurl.com"

let maxValue = 500

let maxIntervalInSeconds = 5 * 60 *60
Run Code Online (Sandbox Code Playgroud)

但是也可以使用在运行时计算的表达式初始化不可变量:

let url = isDebug ? "http://localhost" : "http://www.myservice.com"

let returnCode: Int = {
    switch(errorCode) {
    case 0: return 0
    default: return 1
    }
}()
Run Code Online (Sandbox Code Playgroud)

后一个例子很有意思:使用一个闭包,立即执行,初始化一个不可变的变量(不同的是var,不可变的不支持延迟初始化,所以这是使用多行表达式初始化的唯一方法)

  • 谢谢Antonio.但是为什么它用"let"而不是"foo"或"cheesecake"初始化?抱歉,但我想我错过了回答我最初问题的部分. (3认同)
  • 这可能很愚蠢而且不相关,但我总是认为"让"成为"让它成为" (3认同)
  • 它必须是某种东西,对吧?"let"通常以这种方式用于数学:让x = 5,让y = x*2等. (2认同)
  • Apple在其文档中称其为常量:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID311 (2认同)