Swift Learning | 访问控制

写完洗澡睡觉!

模块和源文件

简单的理解:

  • 模块:一个 app 就是一个模块,一个第三方库或者一个 framework 都是一个模块,使用import关键字导入
  • 源文件:一个模块中的单个 Swift 源代码文件(实际上,是一个应用程序或是框架中的单个文件),一个源文件可以包含多个类型、函数等

访问级别

如图。

open

  • 仅适用于类和类成员
  • 访问权限最高
  • 可以被当前模块或者其他模块中访问
  • 可以在当前定义的模块中被其他类继承、重写
  • 可以被其他模块的类给继承、重写

public

  • 可以被当前模块或者其他模块中访问
  • 可以在当前定义的模块中被其他类继承、重写(仅限同一 module 使用)
  • 不可以被其他模块的类给继承、重写

internal

  • 默认的权限范围(不显示声明的都为默认 internal)
  • 可以被当前模块中访问

fileprivate

  • 同一个 swift 的源文件可以访问。比如,一个 swift 文件下,不同类之间是可以访问的

private(set)

  • 在类外面可以访问,但是不能修改(写)

private

  • 权限范围最低
  • 只能被当前类里面访问,在类外面不行

final 关键字

被 final 关键字修饰了的类、属性、方法、函数,都不能被继承和 override,用来做权限控制。

Tips

  • 在写代码之前,先思考设计这些权限的问题再开始写代码
  • 根据类、结构体、enum 里面的方法属性是否需要暴露为 API,不需要就设置为 private
  • 不确定的先设计为 private,后面有需要再修改
  • 一般都是写 APP,所以不需要考虑 open 和 public,很少会用,除非写框架之类的(我应该不会用到)

参考

访问控制

晚安😴