Swift架构 - Functions
可执行代码,如fido.bark()
或one = two
或print("hello")
,不能直接进入程序的任何地方。不了解这一事实是初学者常见的错误,并可能导致一个神秘的编译错误消息,如“预期声明”。
一般来说,可执行代码必须存在于函数体中。函数是一批代码,可以作为批处理,来运行。它的主体由花括号分隔。通常,函数有一个名称,它通过函数声明获得这个名称。函数声明语法是稍后要补充的另一个细节,但这里有一个例子:
1 | func go() { |
它描述了一系列要做的事情——声明one
,声明two
,改变two
的值以匹配one
——它给了这个序列一个名字go
;但它不能执行序列。当有人调用这个函数时,就执行这个序列。因此,我们可以在别处说:
1 | go() |
这是go
函数的一个命令,它应该实际运行。但同样,该命令本身是可执行代码,因此它也不能单独存在。它可能存在于不同的函数体中:
1 | func doGo() { |
但是等等!这有点疯狂了。这也只是一个函数声明;要运行它,必须有人通过说doGo()
来调用doGo
-这也是可执行代码。这似乎是某种无限循环;看起来我们的代码都不能运行了。如果所有可执行代码都必须存在于一个函数中,谁会告诉任何函数运行?最初的推动力一定来自某个地方。
幸运的是,在现实生活中,没有出现这种循环问题。请记住,你的目标最终是编写一个 iOS 应用程序。你的应用程序将通过一个已经想要调用某些函数的运行时在 iOS 设备(或模拟器)上运行。因此,您从编写运行时本身将调用的特殊函数开始。这给了你的应用一个启动的方式,并给了你放置函数的地方这些函数会在关键时刻被运行时调用。
Swift 也有一个特殊的规则,一个名为
main.swift
的文件,例外情况下,可以在它的顶层有可执行代码,在任何函数体之外,这是当程序运行时实际运行的代码。你可以用main.swift
文件来构建你的应用程序,但一般情况下你不需要这么做。在本章的其余部分,我将假设我们不在main.swift
文件中。