Swift 访问控制

模组 Module

模组 是代码分布的单一单元。比如一个被作为一个单位编译和发布,别且可以被其它模组用import导入的框架或应用。
Xcode中的每个编译目标(build target)比如app bundle或者framework在Swift中都是被作为单独的模组。
源文件source file 是模组中的单独Swift源代码文件也就是应用或者框架的一个文件.

访问等级 Access Levels

Swift 提供了五种不同的访问等级。

  • OpenPubilc 访问等级可以在模组中的任何源文件内访问,也可以在其它导入该模组的源文件中被访问。一般在设定框架的接口的时候用这两个属性。
  • Internal 访问等级可以在所定义的模组中任何源文件内访问。一般在定义框架或者应用的内部结构时使用。
  • File-private访问等级只能在该文件内访问。一般在整个都用的地方定义。对外部来说具体实现是隐藏的。
  • Private 访问等级限制了实例在封闭的声明中,即使是同一个文件的扩展也不能访问。一般在用在那些仅在当前的声明中使用的代码部分。

Open访问等级仅用在类和类成员,与Public的区别如下。

  • Public (或者比Public限制等级更高的访问等级)定义的类,仅可在他们被定义的模组中定义子类。
  • Public(或者比Public限制等级更高的访问等级) 定义的类成员,仅可在他们被定义的模组中被他们的子类重写。
  • Open 定义的类可以在他们被定义的模组和其它导入他们的模组中定义子类。
  • Open 定义的类成员可以在他们被定义的模组和其它导入他们的模组中重写。

把类标记为Open就意味着已经需要考虑好了外部模组将它作为基类的影响。

简而言之,Open定义的类可以在导入它的模组中重写定义子类,类成员可以重写。 而Public和其它级别都是不可以。

选择

在被导入的时候支持重写 -> Open
在被导入的文件可以访问 -> Public
在自己的模组中支持所有文件访问 -> Internal
在自己所在文件中可以访问 -> Fileprivate
在自己所定义的部分可以访问(扩展都不可以访问)-> Private

你可能感兴趣的:(Swift 访问控制)