常量和变量将名称(比如maximumNumberOfLoginAttempts或者welcomeMessage)和特定类型的值(比如数字10或者字符串hello)关联到一起。一个常量的值一旦它被赋值就不能改变了,然而一个变量之后可以被赋予不同的值。
常量和变量的声明
常量和变量在它们使用之前必须声明。使用let关键词声明常量而使用var关键词声明变量。这里有一个例子是用常量和变量来跟踪用户登录的尝试次数。
这个代码可以解读为:“声明一个新的常量maximumNumberOfLoginAttempts,并且给它赋值10.然后,声明一个新的变量currentLoginAttempt,并且给它一个初始值0”
在这个例子中,允许尝试登录的最大次数被声明为一个常量,因为最大值永远不会改变。当前的尝试登录数目被声明为一个变量,因为这个值在每次尝试登录失败之后增加。
你可以在一行中声明多个常量或者变量,使用逗号隔开:
注意:如果在你的代码中存储一个不会改变的值,总是使用关键字let把它声明为一个常量。存储一个可能会改变的值,请使用变量。
类型注解(Type Annotations)
在你声明常量或者变量的时候,可以提供一个类型注解,来明确常量和变量能够存储何种类型的值。编写一个类型注释将冒号放在常量名或变量名之后,随后是一个空格,紧随其后的是使用类型名称。
这个例子为一个叫做welcomeMessage的变量提供了一个类型注释,来指出这个变量能存储字符串。
在声明处的冒号表示是什么类型的,所以上面的代码可以解读为:“声明一个叫welcomeMessage的字符串类型的变量”。“of type string”的词组表示“能够存储任意字符串值”。你可以把它理解为一个容器,可以承装任意类型的东西。
现在变量welcomeMessage能够被设置为任意的字符串值而不会有错误的。
注意:
在实践中,很少会需要添加类型注解的。如果在定义常量或者变量时,提供初始值,Swift几乎总是能够推断出那个常量或变量所使用的类型,在“类型安全检查和类型推断”里有详细的描述。在上面的welcomeMessage的例子中,没有提供初始值,所以welcomeMessage变量的类型是经过类型注释d的,而不是从初始值推断的。
常量和变量的命名
你几乎可以使用任何字符为常量和变量命名,包括Unicode字符:
常量和变量名字中不能包含数学符号,箭头,私人用的(或者无效的)Unicode编码,或者是类似于线条或者方块似的字符。它们也不能以数字开头,但是数字可以包含在名字的其余部分中。
当你已经声明了某种类型的常量或变量,你不能用同样的名字再次声明它,或者用它来存储一个不同类型的值。你也不能把一个常量变为一个变量,或者把一个变量变为常量。
注意:
如果你想使用Swift保留的关键字作为常量或者变量的名字的话,你可以在关键字的两端加上反勾号(`,键盘左上角的),这样你就可以把它作为名字使用了。不过,你应该避免使用关键字来命名,除非你实在没有选择了。
你可以把另外一个类型兼容的值赋给一个已存在的变量。在这个例子中,friendlyWelcome的值从"Hello"变为"Bonjour!":
不像变量,一个常量的值一旦被设置就不能改变。尝试这样做的话,编译的时候,你的代码会报告一个错误:
打印一下常量和变量
你可以使用println函数来打印常量或变量的当前值:
全局函数println将结果紧跟一个换行符,打印到适合的输出设备上面。比如,你在使用Xcode,println就会将结果打印在Xcode的控制台面板当中。(另外一个函数,print,执行同样的任务。只不过没有在打印结果上面加上换行符)。
println函数可以打印任何你传递给他的字符串值:
println函数能够打印更多复杂的日志信息,就像Cocoa的NSLog函数一样。这些信息可以包含常量和变量的当前值。
Swift将常量或者变量作为占位符插入到字符串当中,之后就用那个常量或变量的当前值来替换它,这就是所谓的字符串内嵌(String Interpolation)。用圆括号包住名字并且在圆括号之前加上反斜 杠(\)。
注意:
使用字符内嵌的相关描述都在“字符内嵌”当中。