在 Swift 语言中,访问修饰符有五种,分别为 private,fileprivate,internal,public 和 open。
其中 fileprivate 和 open 是 Swift 3 新添加的。由于过去 Swift 对于访问权限的控制,不是基于类的,而是基于文件的。这样会有问题,所以 Swift 3 新增了两个修饰符对原来的 private、public 进行细分。
下面分别说说各种修饰符的范围&区别:
- private(Class级别)
private 访问级别所修饰的 属性 或者 方法 只能在 当前类 里访问。
注意:Swift4 中,extension 里也可以访问 private 的属性。
fileprivate(File级别)
fileprivate 访问级别所修饰的 属性 或者 方法 在 当前的 Swift 源文件 里可以访问。internal(Module级别,Default,internal修饰符可写可不写)
- internal 访问级别所修饰的 属性 或 方法 在源代码所在的 整个模块 都可以访问。
- 如果是框架或者库代码,则在整个 框架内部 都可以访问,框架由外部代码所引用时,则不可以访问。
- 如果是 App 代码,也是在 整个 App 代码,也是在 整个 App 内部 可以访问。
public(开放级别,但是有些限制)
可以被 任何人 访问。
但,其他 module 中不可以被 override & 继承 ,而在 module 内可以被 override & 继承 。open(开放级别,无限制)
可以被 任何人 使用,包括 override & 继承 。
总结,5种修饰符访问权限排序如下:
open > public > interal > fileprivate > private