Swift中private、fileprivate、public、open和internal权限代码证明详解

在这里插入图片描述
Swift学习中代码也写了很多,但是对于swift中的权限的定义和使用上真是不明白。很尴尬,所以就抽一时间给写一下并验证对他们对定义!然后就写了下面对结构:
在这里插入图片描述

Swift权限详解

先做一下总结:
在权限定义上,从严格到宽松排序 private \ fileprivate \ internal \ public \ open
private : 使用范围只限于当前定义了变量和方法的 class 类中,以及当前swift文件额extension扩展属性中(扩展属性另起一个swift文件,则不行)。且,使用它修饰过的类不能被继承 ,当然方法也不能被调用和重写。
fileprivate : 使用范围只限于当前.swift文件中的类(包含当前swift文件中另定义的class类)和extentsion扩展属性中(扩展属性另起一个swift文件,则不行)。且,使用它修饰过的类不能被继承 ,当然方法也不能被调用和重写。
internalpublicopen 他们三个在同一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值