首页 » iOS编程基础:Swift、Xcode和Cocoa入门指南 » iOS编程基础:Swift、Xcode和Cocoa入门指南全文在线阅读

《iOS编程基础:Swift、Xcode和Cocoa入门指南》1.6 Swift文件的结构

关灯直达底部

Swift程序可以包含一个或多个文件。在Swift中,文件是一个有意义的单元,它通过一些明确的规则来确定Swift代码的结构(假设不在main.swift文件中)。只有某些内容可以位于Swift文件的顶层部分,主要有如下几个部分

模块import语句

模块是比文件更高层的单元。一个模块可以包含多个文件,在Swift中,模块中的文件能够自动看到彼此;但如果没有import语句,那么一个模块是看不到其他模块的。比如,想想如何在iOS程序中使用Cocoa:文件的第1行会使用import UIKit。

变量声明

声明在文件顶层的变量叫作全局变量:只要程序还在运行,它就会一直存在。

函数声明

声明在文件顶层的函数叫作全局函数:所有代码都能看到并调用它,无需向任何对象发送消息。

对象类型声明

指的是类、结构体或是枚举的声明。

比如,下面是一个合法的Swift文件,包含(只是为了说明)一个import语句、一个变量声明、一个函数声明、一个类声明、一个结构体声明,以及一个枚举声明。


import UIKitvar one = 1func changeOne {}class Manny {}struct Moe {}enum Jack {}  

这个示例本身并没有什么意义,不过请记住,我们的目标是探求语言的组成部分与文件的结构,该示例仅仅是为了演示。

此外,示例中每一部分的花括号中还可以加入变量声明、函数声明与对象类型声明。事实上,任何结构化的花括号中都可以包含这些声明。比如,关键字if(Swift流程控制的一部分,第5章将会介绍)后面会跟着结构化的花括号,它们可以包含变量声明、函数声明与对象类型声明。如下代码虽然毫无意义,但却是合法的:


func silly {    if true {        class Cat {}        var one = 1        one = one + 1    }}  

你会发现我并没有说可执行代码可以位于文件的顶部,因为这是不行的。只有函数体可以包含可执行代码。函数自身可以包含任意深度的可执行代码;在上述代码中,one=one+1这一行可执行代码是合法的,因为它位于if结构中,而该if结构又位于函数体中。但one=one+1这一行不能位于文件顶层,也不能位于Cat声明的花括号中。

示例1-1是一个合法的Swift文件,其中概要地展示了其结构的各种可能性。(请忽略枚举声明中关于Jack的name变量声明;枚举中的顶层变量有一些特殊规则,稍后将会介绍。)

示例1-1:合法的Swift文件的概要结构


import UIKitvar one = 1func changeOne {    let two = 2    func sayTwo {        print(two)    }    class Klass {}    struct Struct {}    enum Enum {}    one = two}class Manny {    let name = "manny"    func sayName {        print(name)    }    class Klass {}    struct Struct {}    enum Enum {}}struct Moe {    let name = "moe"    func sayName {        print(name)    }    class Klass {}    struct Struct {}    enum Enum {}}enum Jack {    var name : String {        return "jack"    }    func sayName {        print(name)    }    class Klass {}    struct Struct {}    enum Enum {}}  

显然,可以一直递归下去:类声明中可以包含类声明,里面的类声明中还可以包含类声明,以此类推。不过这么做毫无意义。