Swift 3.0 权限访问

本文深入解析Swift 3.0中的访问控制权限,包括open、public、final、fileprivate及private的不同作用范围,通过实例展示这些权限如何影响类的继承和方法的重写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 外方法是否可以重写
openYESYESYESYES
publicYESYESNONO
finalNONONONO

private 和 fileprivate

  fileprivate 是 Swift3.0 新增加的访问控制权限, 对 private 进行了”优化”
  filePrivate 访问权限是当前文件, 也就是 .swift 文件内, 当前文件的所有地方, 包括 extension 地方, 这个点是和 private 不同的地方,不能被其他文件访问,
  private 的访问权限是当前的 extension 代码块中, 实现了真正的私有,离开了这个类或者这个结构体的作用域外面就无法访问
  举例说明一下, 如下图
这里写图片描述
   为啥 Swift3.0 会增加这俩权限呢, 肯定是因为有好处了
  好处就是: private 跟 extension 分割代码配合使用是最常见的使用场景, 这里我们通过 private 来隐藏内部的实现, 然后使用 filePrivate 来吧 借口暴露在类的内部

访问权限当前类(.swift 文件中)extension 中其他文件(.swift文件)
fileprivateYESYESNO
privateNOYESNO

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值