Swift 学习笔记3 —— 变量和函数

·123 字·1 分钟
Swift Swift
n3xtchen
作者
n3xtchen
Sharing Funny Tech With You

变量 #

变量是一个对象的名称。技术角度,它是一个对象的索引。非技术角度,你可以把它当作装对象的一个鞋盒。一个对象可能会被改变,或者被放到另一个对象的鞋盒中,但是名称代表他们整体。

Swift,所有的变量都必须明确声明。你可以使用这两个关键词中的一个来声明它:letvar。通常,声明会和初始化一起完成——你使用等号来给一个变量赋值,在声明语法的右边部分:

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 不能成为应用的一部分,所以它不再本书的讨论范围。