swift5.x 访问权限控制


// swift 里的 权限控制
// 模块和源文件
//模块:  模块指的是独立的代码分发单元,框架或应用程序会作为一个独立的模块来构建和发布。在swift中,一个模块可以使用import关键字导入另一个模块
//源文件: 源文件就是swift 里的源代码文件,它通常属于一个模块,即一个应用程序或者框架。尽管我们一般会将不同的类型分别定义在不同的源文件中,但是同一个源文件也可以包含多个类型、函数之类的定义

// 访问级别
//1 open: 公开权限,最高权限,可以被其他模块访问,继承和复写。只能用于类和类成员
//2 public: 共有访问权限,类或者类的公有属性或者公有方法可以从文件或者模块的任何地方进行访问。怎么才能构成一个模块呢?一个App就是一个模块,一个第三方API, 第三方框架等都是一个完整的模块,这些模块如果要对外留有访问的属性或者方法,就应该使用 public的访问权限。public的权限在swift3.0 后无法在其他模块被复写方法/属性或被继承
//3 internal: 顾名思义,internal是内部的意思,即有着internal 访问权限的属性和方法说明在模块内部可以访问,超出模块内部那就不可被访问了。Swift中默认就是internal的访问权限
//4 fileprivate: 文件私有访问权限,被fileprivate修饰的类或者类的属性或方法可以在同一个物理文件中访问,超出该物理文件,那么有着fileprivate访问权限的类,属性和方法就不能被访问。
//5 private: 私有访问权限,被private修饰的类或者类的属性或方法,可以在同一个物理文件中的同一个类型(包含extension)访问。如果超出该物理文件或不属于同一类型,那么有着private访问权限的属性和方法就不能被访问。


//潜规则1
// 如果一个类的访问级别是 fileprivate 或 private, 那么该类的所有成员都是fileprivate 或 private (此时成员无法修改访问级别), 如果一个类的访问级别是 open, internal 或者 public 那么它的所有成员都是internal, 类成员的访问级别不能高于类的访问级别(注意: 嵌套类型的访问级别也符合此规则)

//潜规则2
// 常量、变量、属性、下标脚步访问级别低于其所声明的类型级别,并且如果不是默认访问级别(internal) 要明确声明访问级别(例如一个常量是一个 private 类型的类类型, 那么此常量必须声明为private 或者 fileprivate)
//潜规则3
// 在不违反1、2两条规则的前提下,setter的访问级别可以低于 getter 的访问级别(例如一个属性访问级别是 internal,那么可以添加 private(set) 修饰符将 setter权限设置为private, 在当前 模块中只有源文件可以访问,对外部是只读的)

//潜规则4
// 必要构造方法(required 修饰)的访问级别必须和类访问级别相同,结构体的默认逐一构造函数的访问级别不高也其成员的访问级别(例如一个成员是private 嘛么这个构造函数就是private ,但是可以通过自定义来声明一个 public的构造函数),其他方法(包括其他构造方法和普通方法)的访问级别这些潜规则1.




posted @ 2020-06-10 18:19  wjwdive  阅读(594)  评论(0编辑  收藏  举报