常量和变量把名字(例如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一个特定类型的值(例如数字 10 或者字符串 “Hello”)关联起来。常量的值一旦设置好便不能再被更改,然而变量可以在将来被设置为不同的值。
变量声明
使用 let 来声明一个常量,用 var 来声明一个变量。常量的值在编译时并不要求已知,但是你必须为其赋值一次。这意味着你可以使用常量来给一个值命名,然后一次定义多次使用。
var myVariable = 42
myVariable = 50
let myConstant = 42
变量名
常量和变量的名字几乎可以使用任何字符,甚至包括 Unicode 字符:
let π = 3.14159
let 你好 = "你好世界"
let 🐶️🐮️ = "dogcow"
常量和变量的名字不能包含空白字符、数学符号、箭头、保留的(或者无效的)Unicode 码位、连线和制表符。也不能以数字开头,尽管数字几乎可以使用在名字其他的任何地方。
一旦你声明了一个确定类型的常量或者变量,就不能使用相同的名字再次进行声明,也不能让它改存其他类型的值。常量和变量之间也不能互换。
如果你需要使用 Swift 保留的关键字来给常量或变量命名,可以使用反引号( ` )包围它来作为名称。总之,除非别无选择,避免使用关键字作为名字除非你确实别无选择。
变量类型
常量或者变量必须拥有和你赋给它们的值相同的类型。不过,你并不需要总是显式地写出类型。在声明一个常量或者变量的时候直接给它们赋值就可以让编译器推断它们的类型。比如上面的例子,编译器就会推断 myVariable 是一个整型,因为它的初始值是一个整型。
如果初始值并不能提供足够的信息(或者根本没有提供初始值),就需要在变量的后边写出来了,用冒号分隔。
你可以在声明一个变量或常量的时候提供类型标注,来明确变量或常量能够储存值的类型。添加类型标注的方法是在变量或常量的名字后边加一个冒号,再跟一个空格,最后加上要使用的类型名称。
let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70
你可以在一行中定义多个相关的变量为相同的类型,用逗号分隔,只要在最后的变量名字后边加上类型标注。
var red, green, blue: Double
实际上,你并不需要经常使用类型标注。如果你在定义一个常量或者变量的时候就给他设定一个初始值,那么 Swift 就像类型安全和类型推断中描述的那样,几乎都可以推断出这个常量或变量的类型。
类型转换
值绝对不会隐式地转换为其他类型。如果你需要将一个值转换为不同的类型,需要使用对应的类型显示地声明。
let label = "The width is "
let width = 94
let widthLabel = label + String(width)