一、在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排列, 实体指被访问级别修饰的内容)
popen:允许在定义实体的模块、其他模块中访问,允许其他模块进行继承、重写(open只能用在类、类成员上)
public:允许在定义实体的模块、其他模块中访问,不允许其他模块进行继承、重写
internal:只允许在定义实体的模块中访问,不允许在其他模块中访问
fileprivate:只允许在定义实体的源文件中访问
private:只允许在定义实体的封闭声明中访问
绝大部分实体默认都是 internal
二、访问级别的使用准则
一个实体不可以被更低访问级别的实体定义,比如
1、变量\常量类型 ≥ 变量\常量
2、参数类型、返回值类型 ≥ 函数
3、父类 ≥ 子类
4、父协议 ≥ 子协议
5、原类型 ≥ typealias
6、原始值类型、关联值类型 ≥ 枚举类型
7、定义类型A时用到的其他类型
解释
1、变量\常量类型 ≥ 变量\常量
变量类型 Persion 的访问级别是 fileprivate
变量 p 的访问级别是 internal
因为 internal > fileprivate
所以会报错
其他相同
三、元组的访问级别 是元组内访问界别最低的
元组类型的访问级别是所有成员类型最低的那个
internal struct Dog {}
fileprivate class Person {}
// (Dog, Person)的访问级别是fileprivate
fileprivate var data1: (Dog, Person)
private var data2:(Dog, Person)
网友评论