为什么用关键字" let"声明常量?在斯威夫特?

时间:2014-09-26 16:05:39

标签: xcode swift

标题说明了一切......为什么用关键字" let"声明一个常量?在斯威夫特?

对于这个noob问题,可能有一个简单的答案,但我无法在SO上找到它。

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

1 个答案:

答案 0 :(得分:12)

实际上很快就没有恒定变量的概念。

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

const NSString *string = [[NSString alloc] init];

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

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

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

let maxValue = 500

let maxIntervalInSeconds = 5 * 60 *60

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

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

let returnCode: Int = {
    switch(errorCode) {
    case 0: return 0
    default: return 1
    }
}()

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