1. 常量和变量
常量 和 变量 把一个名字(比如 ‘number‘ 或者 ‘welcomeMessage‘)和一个指定类型的值(比如数字‘10‘或者字符串 ‘ "Hello" ‘ )关联起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。
1> 声明变量和常量
常量 和 变量 必须在使用前声明,用 ‘let‘ 来声明 常量,用 ‘var‘ 来声明 变量。下面的例子展示了如何用常量和变量来一个数字:
let constantsNumber = 10
var variablesNumber = 0
这两行代码可以被理解为:"声明一个名字是 ‘constantsNumber‘ 的新常量,并给它一个值 ‘10‘ 。然后,声明一个名字是 ‘variablesNumber‘ 的变量并将它的值初始化为 ‘0‘ "
你可以在一行中声明多个常量或者多个变量,用逗号隔开:var x = 0.0, y = 0.0, z = 0.0
>注意: 如果你的代码中有不需要改变的值,请使用 ‘let‘ 关键字将它声明为常量。只将需要改变的值声明为变量。
2> 类型标注
当你声明 常量 或者 变量 的时候可以加上 _类型标注(type annotation)_ ,说明 常量 或者 变量 中要存储的 值的类型。如果要添加类型标注,需要在 常量 或者 变量 名后面加上一个 冒号和空格,然后加上类型名称。
这个例子给 ‘welcomeMessage‘ 变量添加了 类型标注,表示这个变量可以存储 ‘String‘ 类型的值:
var welcomeMessage: String
声明中的冒号代表着 "是...类型" ,所以这行代码可以被理解为:"声明一个类型为 ‘String‘ ,名字为 ‘welcomeMessage‘ 的变量。"
类型为 ‘String‘ 的意思是 "可以存储任意 ‘String‘ 类型的值。"
‘welcomeMessage‘ 变量现在可以被设置成任意字符串:
welcomeMessage = "Hello"
> 注意:一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,请参考[类型安全和类型推断](type_safety_and_type_inference)。在上面的例子中,没有给 ‘welcomeMessage‘ 赋初始值,所以变量 ‘welcomeMessage‘ 的类型是通过一个类型标注指定的,而不是通过初始值推断的。
3> 常量和变量的命名
你可以用任何你喜欢的字符作为 常量 和 变量名,包括 Unicode 字符:
let π = 3.14159
let 你好 = "你好世界"
let ???? = "dogcow"
常量 与 变量名的命名规则: 不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。
变量和常量名不能重复! 一旦你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者改变其存储的值的类型。同时,你也不能将常量与变量进行互转。
> 注意:如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字包围的方式将其作为名字使用。无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。
你可以更改现有的变量值为其他同类型的值,在下面的例子中,`friendlyWelcome`的值从`"Hello!"`改为了`"Bonjour!"`:
var friendlyWelcome = "Hello!"
friendlyWelcome = "Bonjour!"
// friendlyWelcome 现在是 "Bonjour!"
与变量不同,常量的值一旦被确定就不能更改了。尝试这样做会导致编译时报错:
let languageName = "Swift"
languageName = "Swift++"
// 这会报编译时错误 - languageName 不可改变
4> 输出常量和变量
你可以用`print`函数来输出当前常量或变量的值:
print(friendlyWelcome)
// 输出 "Bonjour!"
① `print`是一个用来输出的全局函数,输出的内容会在最后换行。如果你用 Xcode,`print`将会输出内容到“console”面板上。
② `print`函数输出传入的`String`值:
print("This is a string")
// 输出 "This is a string"
与 Cocoa 里的`NSLog`函数类似的是,`print`函数可以输出更复杂的信息。这些信息可以包含当前常量和变量的值。
Swift 用 _字符串插值(string interpolation)_ 的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:
println("The current value of friendlyWelcome is \(friendlyWelcome)")
// 输出 "The current value of friendlyWelcome is Bonjour!
> 注意:字符串插值所有可用的选项,请参考[字符串插值](03_Strings_and_Characters.html#string_interpolation)。
5> 常量与变量的关系
- 变化才是永恒不变的。无论如何变化,总有规律可循。
- 变量 与 常量 在一定条件下可以相互转换。
- 常量 就是 变量 的一种。
2. 注释
请将你的代码中的非执行文本注释成提示或者笔记以方便你将来阅读。Swift 的编译器将会在编译代码时自动忽略掉注释部分。
1> 注释的种类
Swift 中的注释与C 语言的注释非常相似。单行注释以双正斜杠作(`//`)为起始标记:
// 这是一个注释
你也可以进行多行注释,其起始标记为单个正斜杠后跟随一个星号(`/*`),终止标记为一个星号后跟随单个正斜杠(`*/`):
/* 这是一个,
多行注释 */
与C 语言多行注释不同,Swift 的多行注释可以嵌套在其它的多行注释之中。你可以先生成一个多行注释块,然后在这个注释块之中再嵌套成第二个多行注释。终止注释时先插入第二个注释块的终止标记,然后再插入第一个注释块的终止标记:
/* 这是第一个多行注释的开头
/* 这是第二个被嵌套的多行注释 */
这是第一个多行注释的结尾 */
通过运用嵌套多行注释,你可以快速方便的注释掉一大段代码,即使这段代码之中已经含有了多行注释块。
2> 注释的作用
- 有助于自己理解
- 便于他人理解
- 专业优雅
3.分号
与其他大部分编程语言不同,Swift 并不强制要求你在每条语句的结尾处使用分号(`;`),当然,你也可以按照你自己的习惯添加分号。有一种情况下必须要用分号,即你打算在同一行内写多条独立的语句:
let cat = "??"; println(cat)
// 输出 "??"