Swift 学习笔记3 —— 变量和函数
变量 #
变量是一个对象的名称。技术角度,它是一个对象的索引。非技术角度,你可以把它当作装对象的一个鞋盒。一个对象可能会被改变,或者被放到另一个对象的鞋盒中,但是名称代表他们整体。
在 Swift,所有的变量都必须明确声明。你可以使用这两个关键词中的一个来声明它:let
和 var
。通常,声明会和初始化一起完成——你使用等号来给一个变量赋值,在声明语法的右边部分:
let one = 1
var two = 2
一旦被声明,你就可以自由使用它:
let one = 1
var two = 2
two = one
最后一行使用的是前两个声明的变量名。一个这样的语句,一个变量名在等号的左边,我们称之为赋值(assignment);等号就是赋值操作符,不是等式断言,是一个命令。它的意思就是:“从我的右边对象获取值,使用它替换我左边对象的值。”
使用 let
声明的变量为常量,它的值一旦被设定,就不能被改变:
let one = 1
var two = 2
one = two // 编译错误
尽可能使用 var
来声明变量,让它自己更灵活;但是你知道你永远不会改变它的值的时候,最好使用 let
,它会让 Swift 更加的高效。
变量也有类型。这个类型一旦被设定,就不能被改变。例如,下面的例子不会被编译通过:
var two = 2
two = "hello"
变量确实有它自己的生命——更准确地说,他们的生命周期。只要变量存在,他就能保持它的值。因此,变量不仅仅是方便命名的方式,还是保护它的一种方式。
函数 #
可执行代码,像 fido.bark
或者 one = two
,不能随便放置。通常,它只会存在函数体内。一个函数是一批代码,一连串的可以被批处理执行的代码。一个函数有一个名称,通过声明来获取这个名称。函数声明的语法:
func go() {
let one = 1
var two = 2
two = one
}
它描述一系列动作——声明 one
,声明 two
,把 two
的值替换成 one
的 —— 给这序列一个名称,go
;但是它不会被执行,只有某人调用的时候,它才会被执行:
go()
这个命令是自执行代码,因此他不能独立存在。它可以存在其它函数体内:
func doGo() {
go()
}
这个优点疯狂。它也只是一个函数声明;必须有有人执行 doGo
,并且它是可执行。如果所有可执行代码都在函数中,谁来执行这些函数?初始动力必须来源某个地方。
在现实生活中,幸运的是,这是回归问题不会存在。记住,你的目标是就是写一个 iOS 应用。因此,你的应用将会运行在 iOS 设备中(或者模拟器)。因此,你们开始写特殊函数的时候,就应该意识到她会被 runtime
自己调用。这给予你的应用开始的方式,给予你放置函数的位置,在关键时刻被 runtime
调用——例如当应用启动的时候,或者当用户在你的应用界面点击乐意按钮的时候。
提示 #
Swift 也有一个特殊的规定:main.swift,异常情况下,可以在它的顶级域中函数体外部编写可执行代码;当程序运行时,代码会被执行。你可以在 main.swift 文件构建你的应用,但是一般情况,你不需要这么做。同时,XCode 允许你创建 playgrounds。一个 playground 文件有个特性,使它可以像 main.swift 文件运行,所以你可以吧可执行代码放到文件顶部。但是 playground 不能成为应用的一部分,所以它不再本书的讨论范围。