在很多情况下,变量都很有用,因为它们的值可随时间而变。在循环中,变量非常适合用于存储临时数字、字符串以及本书后面将讨论的其他对象。 在Swift中,另一种可用于存储值的结构是常量。顾名思义,常量存储的值始终不变。不同于变量,常量一旦赋值就不能修改,就像被锁定一样。然而,与变量一样,常量也有类型,且类型一旦指定就不能改变。 下面来看看如何使用常量:声明常量z,并将变量x的值赋给它: 10> let z = x z: Int = 42 11> 第10行使用了let命令,这是用于创建常量的Swift关键字。常量z的类型和值都与变量x相同:它是一个值为42的Int常量。 如果常量的值真是固定不变的,就不能将另一个数字或变量赋给它。下面来检验这一点: 11> z = 4 <REPL>:11:3: error: cannot assign to 'let' value 'z' z = 4 ~ ^ 11> 试图给常量z重新赋值引发了错误。同样,Swift精准的错误报告指明了方向,它指出了错误所处的行号(11)和列号(3)。 为何Swift要同时支持变量和常量呢?考虑到变量可以修改,而常量不能,使用变量不是更灵活吗?问得好,答案要在底层编译器技术中去找。知道内存单元存储的值不会变时,Swift编译器可更好地决策和优化代码。对于不变的值,务必在代码中使用常量来存储;仅当确定值将发生变化时,才使用变量来存储。总之,常量需要的开销比变量小,这正是因为它们不变。 在你学习Swift开发的过程中,将在确定值不变的情况下越来越多地使用常量。事实上,苹果鼓励在代码中使用常量,不管这样做出于什么考虑。