Tags: Swift 学习笔记
发布时间:2015-08-24
修改时间:2015-08-25
修改内容:添加“单元测试对象的访问级别”一节内容。
作者:Erwin
博客地址:技术杂货铺
欢迎转载,转载请注明出处。
Swift学习笔记系列——(24)访问控制
访问控制的对象
模块和源文件
访问控制的基础
- 模块
一系列代码,Xcode中的一个构造目标
- 源文件
三种访问级别
- public
本模块的任意源文件内可以访问
导入所在模块的其他模块的源文件可以访问
- Internal
默认的访问级别
同一模块的任意源代码中都可以访问
- Private
同一源文件可以访问
访问级别的指导原则
衍生物的访问级别不能高于母体。
默认访问级别
Internal
单元测试对象的访问级别
毫无疑问,声明为public的测试对象可以被测试代码访问;要想访问internal的实体,可以在测试模块的导入声明处用@testable标记。
访问控制具体规则
使用场景 | 默认 | 限制 | 选项 | |
---|---|---|---|---|
自定义类型 | 声明为private的类型,其成员默认是private的。 声明为public或internal的类型,其成员默认是internal的 |
|||
元组 | 元组的访问级别要取元组成员访问级别最低 | |||
函数 | 为函数参数类型和函数返回值类型的最低者 | |||
枚举 | 枚举分支 | 和枚举类型访问级别一致 | 可以指定访问级别 | |
枚举初始值和组合值 | 不能低于枚举类型的访问级别 | |||
嵌套类型 | 同定制类型 | |||
子类型 | 子类型自身 | 子类型的访问级别不能高于超类 | ||
子类型重写 | 重写可以提高访问级别 | |||
常量、变量属性和下标 | 自身 | 不能高于所处类型和自身类型的访问级别 | ||
getter和setter | 所属于对象的访问级别 | 可以单独设置setter为较低的访问级别 | ||
构造方法 | 自定义构造方法 | 不能高于它要构造的类型的访问级别 必要构造方法访问级别和所在类的访问级别一致 |
||
默认构造方法 | 和访问类型一致 public类型的构造方法默认为internal |
|||
结构体的默认成员构造方法 | internal,一旦有存储舒适是private则为private | 可以指定为public | ||
协议 | 协议自身 | 协议成员的访问类型和协议的访问类型一致 | ||
协议继承 | 新协议最多具有和被继承协议相同的访问级别 | |||
协议实现 | 类型实现一个协议的访问级别,要取类型和协议的访问级别最低者,协议要求的每一个部分不能低于这个访问级别。 | 类型可以用用低于自身的访问级别实现一个协议 | ||
扩展 | 扩展自身 | 添加的成员,具有扩展类型成员的默认访问级别 | 给扩展指定明确的访问级别,同时也是指定了扩展内容的访问级别 可以给单个成员指定访问级别 |
|
用扩展实现协议 | 协议实现的默认访问级别和协议的访问级别一致 | 类型实现一个协议的访问级别,要取类型和协议的访问级别最低者,协议要求的每一个部分不能低于这个访问级别。 添加对协议的实现,不能指定访问级别 |
||
泛型 | 一个泛型类型或者泛型方法的访问级别要在 其自身的访问级别与其类型参数访问级别中取最低的 | |||
类型别名/联合类型 | 类型别名的访问级别要等于或者低于它所替代类型的访问级别 |
本章思维导图
说明:紫色字体存疑