美文网首页
Swift访问控制权限

Swift访问控制权限

作者: 不简单的风度 | 来源:发表于2018-07-06 16:17 被阅读24次

    概述

    Swift 3中,新增了 fileprivate 和 open 权限,而在Swift4 中,对 fileprivate 和 private 的访问范围做出了调整。访问控制限制你在不同源文件和 module 之前代码和代码之前的访问。这个特性让你可以隐藏一些代码的实现,和明确一些可以访问和使用的接口。

    Modules 和 源文件

    Swift 的访问控制模型是基于 module 和 源文件的。
    一个 module 是一个独立的代码建造单元,例如一个 framework 或者 application 可以构建和包装成一个可以被其他 module 通过 Swift 的关键字 import 的单元。
    一个源文件是在一个 module 里单独的 Swift 源码(或在 一个 app 或 framework 里的单独的文件) 。虽然常见的是在分开的源文件里定义单独的类型,但一个单独的源文件也能包含多个类型,方法等的定义。

    访问级别

    Swift 提供5个不同的访问级别,权限最高的是open,依次是 publicinternalfileprivate,最低的是private。默认使用的级别是 internal

    open & public

    使用 open 和 public 标记的实体在他们定义的 module 中的任意文件中都可以使用,并且在 import 了其定义的 module 的其他 module 的源文件中也能使用。一般在 framework 中指定公开的接口里使用 open 或者 public 级别。

    open 和 public 的区别

    • 拥有 public 权限或者更低权限的类,只能在其定义的 module 中被子类化
    • 拥有 public 权限或者更低权限的类的成员,只能在其定义的 module 中被重写或子类化
    • 拥有open 权限的类可以在其定义和 import 的 module 中子类化
    • 拥有open 权限的类成员可以在其定义和 import 的 module 中被重写或子类化

    internal

    internal 修饰的实体在其定义 module 中的任意源文件中都可以访问,但是在其他 module 的任意源文件中都访问不了。一般在定义app 或者 framework 内部的结构的时候,使用 internal 级别。

    fileprivate

    fileprivate 限制了只能在其定义的源文件里面使用。使用 fileprivate 权限以隐藏其实现细节。当其只在整个源文件中使用的时候,使用 fileprivate 修饰。

    private

    private 访问权限限制其只能在定义的范围内,和其在同一文件中的 extension 中使用。当其只在当个声明中使用的时候,使用 private 修饰。

    使用原则

    子类: 子类的访问级别不能高于父类,但是子类复写的父类方法的访问级别可以高于父类
    枚举: 枚举的每个值都和他们所属的枚举拥有相同的级别,并且并不能定义单独的访问级别。
    协议: 你可以给协议指定访问级别,并且对于协议的每一项来说,访问级别都和协议相同。并且你不能单独给协议中单独的方法等定义不同的访问级别。

    参考

    Swift4 访问控制权限

    相关文章

      网友评论

          本文标题:Swift访问控制权限

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