美文网首页
Swift 访问控制机制

Swift 访问控制机制

作者: 秋雁上海 | 来源:发表于2020-07-28 22:42 被阅读0次

    概述

    隐藏实现机制,仅暴露对应的接口和 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 访问控制机制

          本文链接:https://www.haomeiwen.com/subject/tsyfrktx.html