前言
本文主要给大家介绍了关于Swift访问控制的相关内容,访问控制对访问你的其他代码源文件和模块部分进行了约束。这个特性允许你隐藏你的代码实现,并且指定通过其可以访问和使用该代码的优选接口。
class,structure 和 enumeration 都可以指定访问级别,当然,property,method,initializer 和 属于这里类型的 subscript。protocol 可以限制到某个上下文,全局变量,变量和函数也可以。
另外,Swift 也提供默认的使用级别给典型的使用场景。确实,如果你编写一款单一目标的 app,你可能根本不需要明确地指定访问控制级别。
模块和源文件
Swift的访问控制模型是基于模块和源文件的概念。
一个模块是单个的代码分布单元————一个 framework 或者应用程序是作为单个单元编译和传递的,他们能够通过 Swift 的 import 关键字被其他模块导入。
在Swift 中, Xcode的每一个 build target(如 一个 app bundle 或者 framework)被当成一个单独的模块。
虽然通常做法是在不同的源文件定义不同的类型,然而一个源文件事实上可以包含不同的类型,函数等的定义。
访问级别
Swift 为你的代码实体提供5个不同的访问级别:
Open 访问和 public 访问允许实体能够被使用在任何来自起决定作用的模块的源文件,或者来自于其他被导入的模块的源文件。通常使用 open 或者 public 来指定framework 的公开接口。两者的不同点将在下面进行描述。 Internal 访问允许实体被使用在他们定义模型的任何源文件里面,但是不能在模块外部的任何源文件使用。通常在定义一个 app 或者一个 framework 的内部结构的时候使用 internal 访问。 File-private 访问限制了在定义源文件中实体的使用。使用 file-private 访问来隐藏特定功能的实现细节,当这些细节在整个文件中使用的时候。 Private 访问将实体的使用限制在封闭声明中。使用 private 访问来隐藏特定功能的实现细节,当这些细节在单个声明使用时。Open 访问是最高访问级别,private 是最低访问级别(最大限制性)。
Open 访问只用在类和类成员,他和 publick 访问的区别如下:
使用 public 访问的类, 或者其他更多限制性的访问级别,只能在定义的模块内创建子类。 使用 public 访问的类成员,或者其他更多限制性的访问级别,只能在定义的模块内被其子类重写。 Open 类可以被定义的模块或者其他 import 该模块的地方创建子类。 Open 类成员可以被定义的模块或者其他 import 该模块的地方创建的子类重写。简单来说就是 public 和 open 的区别就是public 比 open 少了模块外的类继承和类成员重写的权限。








