加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 3.0 权限访问

发布时间:2020-12-14 06:24:33 所属栏目:百科 来源:网络整理
导读:Swift 3.0 权限访问 open public final ??感觉这三个权限专门是为了开发第三方 API 设定的权限,下面详细解释一下 ??下面的这个 Module 可以理解成 一个 framework open ?? open 修饰的 class 和 func 在 Module 内部和外部都可以被访问或者继承 public ??pub

Swift 3.0 权限访问

open public final

??感觉这三个权限专门是为了开发第三方 API 设定的权限,下面详细解释一下
??下面的这个 Module 可以理解成 一个 framework

open

?? open 修饰的 class 和 func 在 Module 内部和外部都可以被访问或者继承

public

??public 修饰的 class 和 func 在 Module 内部可以访问和继承,在 Module 外部只能访问,不可继承

final

?? final 修改的 class 和 func 任何地方都不能被继承或者重写

??举个例子说明一下,需要先创建一个 framework,不懂如何创建的自行Google
??1. 新建了一个 framework 里面有三个文件,分别对应三种权限,OpenModel,PublicModel,FinalModel,每个 Model 中有三个权限的属性和方法,如下图

??2. 新建一个工程,将 framework 拖进工程中,新建三种 Model,分别继承 framework 中的三种属性 Model,然后在 Model 中重写对应父类 Model 的三个方法和调用父类的三个属性.
??下图是继承自 open 权限的 Model

??上图是 继承自 open 权限的 Model,发现三种权限的属性,public 和 open 的属性都有 get 和 set 属性,但是 final 得属性无法 set 和 get
?? 上图中发现父类的三种权限的方法是都可以访问到的
??上图中发现重写父类的方法,只有 open 声明的方法可以被重写,

??下面的两张图分别是继承自 final 和 public 权限的 model,发现都不可以被继承

权限 在Module 内类是否可以继承 在 Module 内方法是否可以重写 在Module 外类是否可以继承 在Module 外方法是否可以重写
open YES YES YES YES
public YES YES NO NO
final NO NO NO NO

private 和 fileprivate

??fileprivate 是 Swift3.0 新增加的访问控制权限,对 private 进行了”优化”
??filePrivate 访问权限是当前文件,也就是 .swift 文件内,当前文件的所有地方,包括 extension 地方,这个点是和 private 不同的地方,不能被其他文件访问,
??private 的访问权限是当前的 extension 代码块中,实现了真正的私有,离开了这个类或者这个结构体的作用域外面就无法访问
??举例说明一下,如下图

?? 为啥 Swift3.0 会增加这俩权限呢,肯定是因为有好处了
??好处就是: private 跟 extension 分割代码配合使用是最常见的使用场景,这里我们通过 private 来隐藏内部的实现,然后使用 filePrivate 来吧 借口暴露在类的内部

访问权限 当前类(.swift 文件中) extension 中 其他文件(.swift文件)
fileprivate YES YES NO
private NO YES NO

参考博客:
https://kemchenj.github.io/2016/08/17/2016-08-17/ 还有一个哥们的博客,但是忘记地址了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读