swift3中新增了两种访问控制权限关键字 fileprivate、open。
先介绍一下swift3之前的一些访问控制权限关键字 private、public、internal(默认)
private
在 swift3 之前,private修饰的属性、方法能在当前文件中访问,包括这个文件的其它类中也可以访问到;
在 swift3 之后,private修饰的属性、方法只能在当前类中访问,及时分类中也无法访问;
public
在 swift3 之前,public修饰的属性、方法能在其他任何地方被访问以及被override;
在 swift3 之后,public修饰的属性、方法能在其他任何地方被访问,但是只有在当前module中能被继承,其他module只能访问无法 override;
新增的两个关键字能解决什么问题
fileprivate
增加的 fileprivate 无疑更加细化了 我们对私有变量及方法的定义,fileprivate 字面上意思是文件类可以被访问,可以说是代替了原来的 private; 而 private 也就回归了真正意义上的私有,只有在当前类中能被访问
open
在不清楚父类中做了什么操作的情况下继承无疑是一件很危险的事情。对于一个framework或者module的设计者而言,在自身的module内,类或者属性对于作者而言是清晰的,能否被继承或者override都是可控的。但是对于使用它的人,作者有时会希望传达出这个类或者属性不应该被继承或者修改。
使用 final 的问题在于,用 final 标记后,在任何地方都不能被override,这肯定无法满足 开发者对于 在自身的module内可以被override,对于使用者无法override的需求。
open的出现弥补了public与final的不足;open代替了原有的 public 的功能;通过open和public就能标记区别一个元素在其他module中是只能被访问还是可以被override。
总结:
swift3中访问权限由高到低依次为:open、public、internal(默认)、fileprivate、private。
无疑,swift3增大了语言的复杂度,但是也无疑增大了我们使用的灵活度,这些都需要我们在编程的同时更深入的思考