Swift架构 - Functions

可执行代码,如fido.bark()one = twoprint("hello"),不能直接进入程序的任何地方。不了解这一事实是初学者常见的错误,并可能导致一个神秘的编译错误消息,如“预期声明”。

一般来说,可执行代码必须存在于函数体中。函数是一批代码,可以作为批处理,来运行。它的主体由花括号分隔。通常,函数有一个名称,它通过函数声明获得这个名称。函数声明语法是稍后要补充的另一个细节,但这里有一个例子:

1
2
3
4
5
func go() {
let one = 1
var two = 2
two = one
}

它描述了一系列要做的事情——声明one,声明two,改变two的值以匹配one——它给了这个序列一个名字go;但它不能执行序列。当有人调用这个函数时,就执行这个序列。因此,我们可以在别处说:

1
go()

这是go函数的一个命令,它应该实际运行。但同样,该命令本身是可执行代码,因此它也不能单独存在。它可能存在于不同的函数体中:

1
2
3
func doGo() {
go()
}

但是等等!这有点疯狂了。这也只是一个函数声明;要运行它,必须有人通过说doGo()来调用doGo -这也是可执行代码。这似乎是某种无限循环;看起来我们的代码都不能运行了。如果所有可执行代码都必须存在于一个函数中,谁会告诉任何函数运行?最初的推动力一定来自某个地方。

幸运的是,在现实生活中,没有出现这种循环问题。请记住,你的目标最终是编写一个 iOS 应用程序。你的应用程序将通过一个已经想要调用某些函数的运行时在 iOS 设备(或模拟器)上运行。因此,您从编写运行时本身将调用的特殊函数开始。这给了你的应用一个启动的方式,并给了你放置函数的地方这些函数会在关键时刻被运行时调用。

Swift 也有一个特殊的规则,一个名为main.swift的文件,例外情况下,可以在它的顶层有可执行代码,在任何函数体之外,这是当程序运行时实际运行的代码。你可以用main.swift文件来构建你的应用程序,但一般情况下你不需要这么做。在本章的其余部分,我将假设我们不在main.swift文件中。