首页 理论教育 Swift访问控制详解

Swift访问控制详解

时间:2023-06-23 理论教育 版权反馈
【摘要】:访问控制是围绕两个重要的概念组织起来的:模块和源代码文件。表7.4.1中展示了Swift提供的五个访问层级:表7.4.1Swift的五种访问层级open访问层级限制最少,而private访问层级限制最多。Swift指定internal是默认访问层级,有了默认访问层级,就不需要为每个类型、属性和方法都明确声明访问控制了。我们可以自行尝试其余类型的访问控制,来观察它们的实际效果。细心的读者会发现,在main.swift中并不能访问loveToLearn这个变量,这就是访问控制的作用。

Swift访问控制详解

大部分场景中,开发者都希望对代码有自己的掌控,比如有些代码是全局可以访问,有些不行,有些则可能要精确到Swift文件层面。因此,Swift为开发者提供了类型的访问控制(access control),这样开发者就能对代码进行控制。

有了访问控制之后,开发者就可以管理自定义的类型、属性和方法等等的访问权限,保证了程序的安全性和私密性。访问控制是围绕两个重要的概念组织起来的:模块(module)和源代码文件(source file)。对工程的文件和组织来说,这是应用的核心构件。

模块是一些组织好的代码。读者应该能回想起来Playground开头有import Foundation,这是框架,它的作用是把一组执行相关任务的类型打包在一起。用import关键字可以把一个模块引入另一个模块。

源代码文件是更为独立单元。源代码文件表示一个文件,并且存在于特定的模块中。把单个类型放进一个源代码文件是个好习惯,但这不是强制的,只是这么做有利于组织工程。表7.4.1中展示了Swift提供的五个访问层级:

表7.4.1 Swift的五种访问层级

open访问层级限制最少,而private访问层级限制最多。通常来说,一个类型的访问层级必须与其属性和方法的访问层级一致。属性的访问层级不能比其所在的类型限制更少,比如一个访问层级是internal的属性不能在一个private访问层级的类型中声明;与之类似的情况是函数的访问控制也不能比其参数列表限制更少,如果破坏了这些条件,编译器便会报错。(www.xing528.com)

Swift指定internal是默认访问层级,有了默认访问层级,就不需要为每个类型、属性和方法都明确声明访问控制了。把internal作为默认层级是合理的,因为一般用Swift写macOS和iOS应用时,两者的源代码一般都用单个模块。因此,只有在需要比internal更强或更弱的访问控制时才需要指定。

我们来看一下private层级的实际使用,为Student类添加一个private变量

学生爱不爱学习只有学生自己心里知道,loveToLearn默认为true。但是在打印自己的信息时,如果热爱学习,在运行main.swift时会打印出来:

细心的读者会发现,在main.swift中并不能访问loveToLearn这个变量,这就是访问控制的作用。我们可以自行尝试其余类型的访问控制,来观察它们的实际效果。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈