Swift 访问控制机制

概述

隐藏实现机制,仅暴露对应的接口和 API 给外部调用者,是面向对象的最佳实践之一。访问控制机制(Access Control)是实现此机制的利器之一。类似于 c++、Java、C#等,Swift 语言也加入了访问控制机制,而且颗粒度更细,以便对代码进行更精细化的控制。

访问控制的施加对象

  • 类型(individual types)
    • 类 (class)
    • 结构 (structure)
    • 枚举 (enumration)
  • 类型之
    • 属性 (property)
    • 方法 (method)
    • 初始化器 (initializer)
    • 下标 (subscript)

模块和源文件

  • 模块(module) 指的是一个单独的代码发布单元,例如 framework、app、package等。其特征是可以在其他模块中使用 import 关键字导入和使用。
  • 源文件(source file) 指的是一个单独的 Swift 源代码文件,通常在模块或者 app 中。

访问控制表

Access Level
(访问级别)
继承和 override 外部
(App等)
module
(模块)
source file
(当前代码文件)
类/结构 说明
open
最高等级。在外部模块中,可以继承,也可以 override。
public
公开。在外部模块中,不可继承和 override。
internal
缺省访问控制级别
模块内部均可访问。
fileprivate
仅当前源文件内部访问。
private
仅当前源代码的当前类、结构内部访问。

访问级别的基本原则

Swift 的访问级别遵循一条基本原则:实体不能被定义在低访问级别的实体中。
例如:

  • public 变量不能定义在 internal 类型中
  • 函数的访问级别不能高于其参数和返回值的最低访问级别

例外情况是在单元测试中,测试案例可以访问任何内部实体。

访问控制语法

open class SomeOpenClass {}
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}

open var someOpenVariable = 0
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}

参考

  • Swift - Access Control

你可能感兴趣的:(Swift 访问控制机制)