Swift访问控制权限

2018-07-06  本文已影响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 的区别

internal

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

fileprivate

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

private

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

使用原则

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

参考

Swift4 访问控制权限

上一篇下一篇

猜你喜欢

热点阅读