今天突然发现访问控制open/public/internal/fileprivate/private,弄的不是很明看,于是查了以下资料,看了一篇关于这方面的博客,在这里整理一下
<pre>
swift3.0中访问控制一共有5个关键字
*1. open:可以在任何地方访问、继承和重写
*2. public:可以在任何地方被访问,在其他module中不能被继承和重写(一会在详细介绍一下什么是module内和module外)
*3. internal:默认访问级别,在整个模块内都可以被访问
*4. fileprivate:其修饰的属性可以再同一个文件被访问、继承和重写,同一个文件指同一个swift文件,一个文件中可以有多个类
- private:其修饰的属性和方法只能在本类被访问和使用,不包括扩展类
</pre>
其访问权限从上至下,逐次降低,下面一一介绍这5个访问控制关键字
1.private 和 fileprivate
这两个访问关键字都是防止文件外访问,但是还是有一些差别的
关于这两个属性的差别,比较简单,这里不赘述,fileprivate相当于swift2.0中的private
2.internal
默认访问级别,internal可以可不写
关于internal关键字,解释起来有点绕
internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。
如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。
如果是App代码,也是在整个App代码,也是在整个App内部可以访问。
3.public
1.使用public修饰的类,属性或方法,可以被任何类访问,
2.但在其他的module中不可以被override和继承,而在本module可以;
注意:module内和module外的区别 : module内是指不需要使用import引用文件,就可以创建对象,表示module内,而module外是指需要使用import文件才能创建对象才能使用
4.open
1.可以被任何人使用
2.也可以被override和继承,这是和public的区别