标题说明了一切......为什么用关键字" let"声明一个常量?在斯威夫特?
对于这个noob问题,可能有一个简单的答案,但我无法在SO上找到它。
编辑:好的,只是为了让问题更加清晰。我知道它需要用某个名称进行初始化,但我认为可能有一个更深层的含义,它来源于它的来源?其他的东西,如" func"对我来说似乎很合乎逻辑,所以我想知道"让"更深刻的含义是什么?是答案 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
不同,不可变的不支持延迟初始化,所以这是唯一的方法使用多行表达式初始化)