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

Swift private 和 public fileprivate、open

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

对于访问控制关键字找了好多文章都不理解的很透彻,更好的理解和学习方式应该是自己写一遍代码测试一下

经过各种翻找 终于找到一个很容易理解很形象的解释了

原来 Swift 中有2种常用访问控制关键字(访问控制修饰符),分别为 private 和 public。而在 Swift 3.0+,又在原来的基础上新增了两种:fileprivate、open。它们可以看成是对 private 和 public 的进一步细分。1、private 修饰符

只允许在当前类中调用,不包括 Extension 
private 现在变为了真正的私有访问控制 
用 private 修饰的方法不可以被代码域之外的地方访问

2、fileprivate 修饰符

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

class A {
    fileprivate func test(){
        print("this is fileprivate func!")
    }
}

class B:A {
    func show(){
        test()
    }
}

3、public 修饰符

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

4、open 修饰符

open 其实就是过去的 public,过去 public 有两个作用:

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

从高到低排序如下:

open > public > fileprivate > private

 

copy“https://blog.csdn.net/Mazy_ma/article/details/70135990#commentBox

Swift3.0中访问权限顺序

在Swift3.0中,权限的访问顺序为:open> public > interal > fileprivate > private。

Swift3.0中访问权限的范围

open(范围是跨module)

open修饰的类在其它module中可以被继承;
open修饰的方法在其它module中可以被访问,可以被子类override;
open修改的变量在其它module中可以被访问

public(范围是跨module,但有限制)

public修饰的类在其它module中可以被访问,但不能被继承
public修饰的方法在其它module中但可以被访问,但不能被override
public修饰的变量在其它module中可以被访问

interal(缺省级别,范围是module内)

interal修饰的类在同一module中可以被继承;但在其它module中不能被访问;
interal修饰的方法在同一module中可以被访问,可以被子类override;但在其它module中不能被访问;
interal修饰的变量在同一module中可以被访问;在其它module中不能被访问;

fileprivate(范围是同一源文件)

fileprivate修饰的类在同一源文件中可以被继承
fileprivate修饰的方法在同一源文件中可以被访问,可以被子类override
fileprivate修饰的变量在同一源文件中可以被访问

private(范围是同一源文件,但有限制)

private修饰的类在同一源文件可以被访问;但不能被继承
private修饰的方法不能被访问
private修饰的变量在不能被访问



作者:OC笔记
链接:https://www.jianshu.com/p/d2be155f20ac
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
《Swift4.0互动教程》正式发布发布时间:2022-07-13
下一篇:
swift2.0如何隐藏和设置状态栏发布时间: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