访问控制可以限定你在源文件或者模块中访问代码的级别。
注意:
为方便起见,在代码中可以设置访问级别的它们(属性、基本类型、函数等)在下面的章节中我们称之为实体。
模块和源文件
swift中的访问控制模型基于模块和源文件这两个概念。
模块指的是:framework或者app bundle。
源文件指的是:swift中的swift file,就是编写swift代码的文件, 它通常属于一个模块。通常一个源文件中包含一个类,在类中包含函数、属性等实体。
访问级别
在swift中,访问级别头如下使用原则:访问的统一性。例如:
- 一个public访问级别的变量,不能将它的类型定义为internal和private的类型。 因为变量可以被任何人访问, 但是定义它的类型不可以,所以这样会出错。
- 函数的访问级别不能高于它的参数、返回类型的访问级别。 因为如果函数定义为public而参数或者返回值类型定义为internal或者private, 就会出现函数可以被任何人访问,但是它的参数或者返回类型不可以。
默认访问级别
代码中所有的实体, 如果不明确的定义其访问级别, 那么它默认为internal级别。在大多数情况下,我们不需要明确的设置实体的访问级别, 因为我们大多数时候都是在开发一个app bundle。
单目标应用程序的访问级别
当你在编写一个单目标应用程序时, 该应用程序的所有功能都是为该应用服务的, 不需要提供给其他应用或者模块使用, 所以我们不用明确的设置访问级别, 使用默认的访问级别internal即可。 但是如果你愿意, 你也可以使用private级别,隐藏一些功能实现的细节。
framework的访问级别
当你在开发framework时,就需要吧一些实体定义为public级别, 以便其他导入该framework后可以正常使用其功能。这些被你定义为public的实体,就是这个framework的api。