标题说明了一切......为什么在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
,不可变的不支持延迟初始化,所以这是使用多行表达式初始化的唯一方法)
归档时间: |
|
查看次数: |
6289 次 |
最近记录: |