40 Swift中代码访问权限控制

简介: Swift中代码访问权限控制

Swift中的代码访问权限控制

模块和源文件

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

访问级别

image.png

潜规则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


怎样创建一个模块

image.png

  • 这里新建一个模块后,创建一个Human类

image.png

这里没有导入Teacher


image.png

如果在其他模块想用Human,需要将Human的类用public修饰

image.png

如果在外边继承Human, 也不行,public等级不行

image.png

这里需要将Human的等级修改为open

另外,结构体没有open权限,结构体只能用public

image.png

如果父类是fileprivate, 那么子类也必须是

image.png

image.png

上面的错误是HumanSex是内嵌类,并用private修饰,那么超出{}后, 则不能访问

image.png

如果属性继承于private,那么该属性也必须声明为private

image.png

image.png

注意此时,外部访问不到age属性









目录
相关文章
|
存储 Swift
Swift - Cell自适应+代码约束(SnapKit)横竖屏支持平铺+根据URL获取图片size
Swift - Cell自适应+代码约束(SnapKit)横竖屏支持平铺+根据URL获取图片size
218 0
swift4.0 代码设置阴影
有的时候,项目中会用到阴影的效果,增加立体感。我们可以让设计师给出切图,用图片填充。我们还可以使用几句代码来实现简单的阴影效果。 实现效果图展示一: image.
1483 0
|
Swift iOS开发
Swift里的类继承,构造和析构代码
敲敲打打, 每天差不多一个小时来学这个, 相信到时候再用XCODE,感觉会熟悉很多。。
1336 0
|
测试技术 C++ iOS开发
Swift 代码的可测试性
本文讲的是Swift 代码的可测试性,我知道如何编写具有可测试性的 C++ 和 Objective-C ,但是 Swift 在这方面又是怎么做的呢?
1233 0