在了解Swift中的权限关键字之前我们需要知道模块和源文件两个概念:
1.模块指的是独立地代码分发单元,框架或应用程序会作为一个独立的模块来构建和发布。在 Swift 中,一个模块可以使用 import 关键字导入另外一个模块。
2.源文件就是 Swift 中的源代码文件,它通常属于一个模块,即一个应用程序或者框架。尽管我们一般会将不同的类型分别定义在不同的源文件中,但是同一个源文件也可以包含多个类型、函数之类的定义。
Swift 中有个5个级别的访问控制权限,从高到低依次是 open, public, internal, fileprivate, private
open: 最高的权限,可以被其他模块访问,继承及重写。比如引入的一个第三方库中, 有需要被本App使用的方法或者属性, 一般都会被声明为open。
public:权限仅次于open,可以在任何地方被访问。和 open 唯一的区别是: 不允许其他模块进行继承、重写。那么什么样才能成为一个模块呢?一个APP就是一个模块,一个第三方框架等都是一个完整的模块,这些模块如果要对外留有访问的属性或者方法,就应该使用 public 的访问权限。
internal:Swift 中默认就是 internal ,可以省略不写。只允许在当前的模块中访问,继承和重写,不允许在其他模块中访问。
fileprivate: 可以在同一个物理文件中访问(包含 extension),在子类中能访问。
private: 只允许在定义的作用域内访问(包含 extension)访问,在子类中不能访问。
它们遵循的基本规则: 高级别的变量不允许被定义为低级别变量的成员变量,比如一个 private 的 class 内部允许包含 public的 String值,反之低级变量可以定义在高级别变量中.