Xcode 为什么用关键字“quot”声明常量;让我们;斯威夫特?

Xcode 为什么用关键字“quot”声明常量;让我们;斯威夫特?,xcode,swift,Xcode,Swift,标题说明了一切……为什么在Swift中用关键字“let”声明常量 也许这个noob问题有一个简单的答案,但我在上面找不到 编辑:好的,只是为了让问题更清楚。我知道它需要用一些名字来初始化,但我认为可能有更深层的含义,它的来源是什么?像“func”这样的东西对我来说似乎很合乎逻辑,所以我想知道“let”的深层含义是什么。实际上在swift中没有常量变量的概念 常量是在编译时解析的表达式。例如,在目标C中,该代码: const NSString *string = [[NSString alloc]

标题说明了一切……为什么在Swift中用关键字“let”声明常量

也许这个noob问题有一个简单的答案,但我在上面找不到


编辑:好的,只是为了让问题更清楚。我知道它需要用一些名字来初始化,但我认为可能有更深层的含义,它的来源是什么?像“func”这样的东西对我来说似乎很合乎逻辑,所以我想知道“let”的深层含义是什么。

实际上在swift中没有常量变量的概念

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

const NSString *string = [[NSString alloc] init];
导致编译错误,说明
初始值设定项元素不是编译时常量
。原因是
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
不同,不可变不支持延迟初始化,因此这是使用多行表达式初始化的唯一方法)

。但为什么它的初始值是“let”,而不是“foo”或“cheesecake”?对不起,我想我错过了回答我最初问题的部分。一定是什么,对吗?“let”在数学中经常以这种方式使用:让x=5,让y=x*2,等等。我认为“let”最初是在BASIC中使用的,在时代的开始……它可能很愚蠢,在这里不相关,但我总是认为“let”是“let”,苹果本身在文档中称它们为常量:我喜欢你的问题,但我相信你在这里找不到答案,因为它更多的是一种……CS哲学和苹果的魔力:)让常数的创建变得明确的
let
指定。与隐式声明变量的语言相比,这提供了语用优势(例如,隐式声明变量的语言太容易引入各种错误)。WWDC 2014视频的开头部分讨论了常量与变量的基本原理,其中讨论了如何更安全地使用常量,如何优化代码,以及如何使程序员的意图更加明确。在回答您修订的问题时,
表示感谢,Rob。这对像我这样的笨蛋很有帮助。欣赏历史课!let这个词导致变量声明通常是完整的英语句子,let本身就是一个完整的词,不像较长的const。简洁和历史无疑是两个主要原因。