• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LCP1.猜数字发布时间:2022-07-13
下一篇:
使用CoreLocation进行定位(Swift版)发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap