Swift学习中代码也写了很多,但是对于swift中的权限的定义和使用上真是不明白。很尴尬,所以就抽一时间给写一下并验证对他们对定义!然后就写了下面对结构:
Swift权限详解
先做一下总结:
在权限定义上,从严格到宽松排序 private \ fileprivate \ internal \ public \ open 。 private : 使用范围只限于当前定义了变量和方法的 class 类中,以及当前swift文件额extension扩展属性中(扩展属性另起一个swift文件,则不行)。且,使用它修饰过的类不能被继承 ,当然方法也不能被调用和重写。 fileprivate : 使用范围只限于当前.swift文件中的类(包含当前swift文件中另定义的class类)和extentsion扩展属性中(扩展属性另起一个swift文件,则不行)。且,使用它修饰过的类不能被继承 ,当然方法也不能被调用和重写。 internal 、 public 、open 他们三个在同一个module中的使用范围是一样的。相同点,在相同swift文件和不同目录文件中均可被继承和重写与访问。不同点,internal 在module内部使用,即只可被访问。public 在moudle外,可被访问,只能被继承但内部属性不能被重写。open 在module外,可被访问,既能被继承且内部属性也能被重写。
private 权限 <类私有>
使用范围只限于当前定义了变量和方法的 class 类中,以及当前swift文件额extension扩展属性中(扩展属性另起一个swift文件,则不行)。且,使用它修饰过的类不能被继承 ,当然方法也不能被调用和重写。
先看一个Iphone.swift 文件
从当前的swift文件看出,private权限的使用范围——范围只限于在当前的swift文件中,且当前文件新定义的class类中也无法访问使用。
在看一个Iphone.swift扩展文件
从这里扩展文件中看,使用private权限描述的方法和变量,也不能直接进行访问。
通过在CurFileTester.swift文件发现
使用private权限进行修饰的类,不能被继承,方法不能被重写。
fileprivate 权限 <文件私有>
使用范围只限于当前.swift文件中的类(包含当前swift文件中另定义的class类)和extentsion扩展属性中(扩展属性另起一个swift文件,则不行)。且,使用它修饰过的类不能被继承 ,当然方法也不能被调用和重写。
先看一个Iphone.swift 文件
当前的swift文件看出,fileprivate权限的使用范围——范围只限于在当前的swift文件和当前文件新定义的class类中。
在看一个Iphone.swift扩展文件
从这里扩展文件中看,使用private权限描述的方法和变量,也不能直接进行访问。
通过在CurFileTester.swift文件发现
使用fileprivate权限进行修饰的类,不能被继承,方法不能被重写。
Other
**internal** 、 **public** 、**open** 他们三个在同一个module中的使用范围是一样的。在相同swift文件和不同目录文件中均可被继承和重写与调用。
通过在CurFileTester.swift文件发现
通过在IphoneXSTester.swift文件发现
通过来自相同和不同目录文件夹的上面内容便可证实internal权限、public 权限和open 权限 修饰过的类可被继承,方法可被重写,变量等均可被访问 的结论。
还有一点暂时不能代码证实的结论是,open和public权限的区别是,一个元素在其他module中是否只能被访问或者被override。 因为open的权限比public更宽泛!而在权限定义上,从严格到宽松排序是 private \ fileprivate \ internal \ public \ open
|
请发表评论