Swift修饰符已经作用域

2,344 阅读2分钟

1、private 修饰符

private只允许在当前类所在源文件中调用, 修饰的方法不可以被代码域之外的地方访问 ,本类源码文件的extension除外。

2、fileprivate 修饰符

fileprivate   其修饰的属性或者方法只能在当前的 Swift 源文件里可以访问,即在同一个文件中,所有的 fileprivate 方法属性都是可以访问到的

3、public 修饰符

修饰的属性或者方法可以在其他作用域被访问   但不能在重载 override 中被访问   也不能在继承方法中的 Extension 中被访问

4、open 修饰符

open则是弥补public语义上的不足。 现在的pubic有两层含义:

  • 这个元素可以在其他作用域被访问
  • 这个元素可以在其他作用域被继承或者override 继承是一件危险的事情。尤其对于一个framework或者module的设计者而言。在自身的module内,类或者属性对于作者而言是清晰的,能否被继承或者override都是可控的。但是对于使用它的人,作者有时会希望传达出这个类或者属性不应该被继承或者修改。这个对应的就是 final final 的问题在于在标记之后,在任何地方都不能override。而对于lib的设计者而言,希望得到的是在module内可以被override,在被import到其他地方后其他用户使用的时候不能被override。 这就是 open 产生的初衷。通过open和public标记区别一个元素在其他module中是只能被访问还是可以被override。

5、internal修饰符

顾名思义,internal是内部的意思,即有着internal访问权限的属性和方法说明在模块内部可以访问,超出模块内部就不可被访问了。在Swift中默认就是internal的访问权限。

从高到低排序如下: open > public > interal > fileprivate > private

参考: blog.csdn.net/shubinniu/a… www.jianshu.com/p/74a46c128…