访问控制可以限定哪些代码你可以访问,哪些代码你不能访问。
测试环境
系统版本
10.11.5 Beta
Swift版本
Xcode8 beta 6(swift 3.0)
模块
在 Swift 中我们使用模块来管理代码,每个模块指定一个命名空间并强制指定模块外哪些部分的代码是可以被访问控制的。
模块就是常用的Framework或App bundle。为了实现某些通用的功能或封装一些常用的方法,我们常会将代码打包成Framework,这个Framework就被称为模块,不论它被引入到其它工程或者Framework,它里面的一切(属性、函数等)都属于这个模块。
前文介绍的Swift的包管理器最终提供到工程使用的就是Framework,这个就是模块。
访问级别
以下对访问级别的描述适用于Xcode8 beta 6及以后的Swift版本(在此之前有三个访问级别,分别为 public
、 internal
、 private
)。
open
可以访问自己模块或应用中源文件里的任何实体,别人也可以访问引入该模块中源文件里的所有实体。
在模块之外,open
声明的成员变量和函数可以被override的。
相当于原来的public
,通常情况下,某个接口或Framework被外部使用时,将其设置为open
级别。public
与open
的含义大致相同,但声明的成员变量和函数不能被override的。
-
internal
可以访问自己模块或应用中源文件里的任何实体,但是别人不能访问该模块中源文件里的实体。不指定的话,默认的就是internal
级别。
fileprivate
可以用作隐藏某些功能的实现细节,作用域为当前源文件。
相当于原来的private
。private
只能在当前作用域内发生作用,比起之前更加private
。
同一文件里 extension 里也是不能访问的到 private 修饰的成员变量。
用Swift开发Framework的iOSer,开始改代码吧~