swift与c++不同,没有头文件,所有的实现都在源文件里。建立一个工程,就是建立了一个新模块。一个模块可以使用import导入另外一个模块。
swift的访问控制和模块、源文件的概念有关,swift定义了5个访问级别:
开放访问和公开访问可以访问同一模块源文件中的任何实体,在模块外也可以通过导入该模块来访问源文件里的所有实体。通常情况下,框架中的某个接口可以被任何人使用时,你可以将其设置为开放或者公开访问。
内部访问可以访问同一模块源文件中的任何实体,但是不能从模块外访问该模块源文件中的实体。通常情况下,某个接口只在应用程序或框架内部使用时,你可以将其设置为内部访问。
文件私有访问限制实体只能被所定义的文件内部访问。当需要把这些细节被整个文件使用的时候,使用文件私有访问隐藏了一些特定功能的实现细节。
私有访问限制实体只能在所定义的作用域内使用。需要把这些细节被整个作用域使用的时候,使用文件私有访问隐藏了一些特定功能的实现细节。
用修饰符open,public,internal,fileprivate,private来声明实体的访问级别。
默认的访问级别是内部访问。
public class SomePublicClass { // 显式公开类
public var somePublicProperty = 0 // 显式公开类成员
var someInternalProperty = 0 // 隐式内部类成员
fileprivate func someFilePrivateMethod() {} // 显式文件私有类成员
private func somePrivateMethod() {} // 显式私有类成员
}
class SomeInternalClass { // 隐式内部类
var someInternalProperty = 0 // 隐式内部类成员
fileprivate func someFilePrivateMethod() {} // 显式文件私有类成员
private func somePrivateMethod() {} // 显式私有类成员
}
fileprivate class SomeFilePrivateClass { // 显式文件私有类
func someFilePrivateMethod() {} // 隐式文件私有类成员
private func somePrivateMethod() {} // 显式私有类成员
}
private class SomePrivateClass { // 显式私有类
func somePrivateMethod() {} // 隐式私有类成员
}
元组类型访问级别
元组的访问级别由最严格的元素访问级别决定。
函数访问级别
函数访问级别由最严格的参数或者返回类型的访问级别决定。但是,如果这种访问级别不符合函数定义所在环境的默认访问级别,那么就需要明确地指定该函数的访问级别。
枚举类型访问级别
枚举成员的访问级别与枚举类型相同,不能单独为枚举成员设置访问级别。
子类
子类的访问级别不能高于父类的访问级别。