美文网首页
访问控制

访问控制

作者: 大写的空气 | 来源:发表于2021-05-28 19:08 被阅读0次
    open

    同一模块内(target)所有实体都可访问,模块外也可以被访问,并且能在模块外被继承与重写

    public

    与open对比,模块外无继承与重写功能

    internal

    同一模块源文件中的任何实体访问,但是不能被模块外的实体访问。默认的访问级别,当然也有例外,如类的访问级别低于internal,则它内部变量或方法的访问级别默认也会低于internal,跟类的访问级别一致.

    fileprivate

    只能在其定义的文件(如.swift文件)内部访问

    private

    只能在当前class中使用

    • 元组的访问级别由元组中访问级别最严格的类型来决定
    • 函数的访问级别根据访问级别最严格的参数类型或返回类型的访问级别来决定。如当函数返回类型为private,函数需显示的声明为private
    • 子类的访问级别不得高于父类的访问级别。例如,父类的访问级别是 internal,子类的访问级别就不能是 public
    • 通过重写给所继承类的成员提供更高的访问级别。如类 A 的访问级别是 public,它包含一个方法 someMethod(),访问级别为 fileprivate。类 B 继承自类 A,访问级别为 internal,但是在类 B 中重写了类 A 中访问级别为 fileprivate 的方法 someMethod(),并重新指定为 internal 级别。通过这种方式,我们就可以将某类中 fileprivate 级别的类成员重新指定为更高的访问级别,以便其他人使用
    • Setter 的访问级别可以低于对应的 Getter 的访问级别,这样就可以控制变量、属性或下标的读写权限。在 var 或 subscript 关键字之前,你可以通过 fileprivate(set),private(set) 或 internal(set) 为它们的写入权限指定更低的访问级别
    • 协议中的每个方法或属性都必须具有和该协议相同的访问级别。如果你定义了一个 public 访问级别的协议,那么该协议的所有实现也会是 public 访问级别。这一点不同于其他类型,例如,类型是 public 访问级别时,其成员的访问级别却只是 internal

    当你的应用程序包含单元测试 target 时,为了测试,测试模块需要访问应用程序模块中的代码。默认情况下只有 open 或 public 级别的实体才可以被其他模块访问。然而,如果在导入应用程序模块的语句前使用 @testable 特性,然后在允许测试的编译设置(Build Options -> Enable Testability)下编译这个应用程序模块,单元测试目标就可以访问应用程序模块中所有内部级别的实体。

    相关文章

      网友评论

          本文标题:访问控制

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