Swift——访问控制关键字说明

有的时候我们从访问控制可以看出代码的质量以及考虑的是否细致,在OC,Java时代我就接触过很多访问控制,但是Swift中又有什么不一样的地方呢?

首先我们来看OC中的访问控制符

  • 属性访问权限
    • protected 该类和所有的子类中的方法可以直接访问这样的变量,这是默认的。
    • private 该类中的方法可以访问这样的变量,子类不可以 可以将变量放在.m中
    • public 除了自己和子类中的方法外,也可以被其他类或者其他模块中的方法所访问。开放性最大。
    • package 框架集中
  • 方法访问权限
    • 只有public、private public .h文件 private .m中

其实这里并不默认,因为只有有那么一点基础都应该知道什么意思,但是当我们写Swift的时候,却发现很多地方不一样了。

swift中访问控制一共有5个关键字

  1. open:可以在任何地方访问、继承和重写
  2. public:可以在任何地方被访问,在其他module中不能被继承和重写(一会在详细介绍一下什么是module内和module外)
  3. internal:默认访问级别,在整个模块内都可以被访问
  4. fileprivate:其修饰的属性可以再同一个文件被访问、继承和重写,同一个文件指同一个swift文件,一个文件中可以有多个类
  5. private:其修饰的属性和方法只能在本类被访问和使用,不包括扩展类

上面部分是Swift新增的特性。

关键字详解

1.private 和 fileprivate

这两个访问关键字都是防止文件外访问,但是还是有一些差别的。

在原有的swift中的 private其实并不是真正的私有,如果一个变量定义为private,在同一个文件中的其他类依然是可以访问到的。

在swift 3中,新增加了一个 fileprivate来显式的表明,这个元素的访问权限为文件内私有。过去的private对应现在的fileprivate。现在的private则是真正的私有,离开了这个类或者结构体的作用域外面就无法访问。

2.internal

internal是Swift默认访问级别,所以其实是可以可不写

internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。
如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。

如果是App代码,也是在整个App代码,也是在整个App内部可以访问。

3.public
1.使用public修饰的类,属性或方法,可以被任何类访问,
2.但在其他的module中不可以被override和继承,而在本module可以;

注意:module内和module外的区别 : module内是指不需要使用import引用文件,就可以创建对象,表示module内,而module外是指需要使用import文件才能创建对象才能使用

4.open
1.可以被任何人使用
2.也可以被override和继承,这是和public的区别
坚持原创技术分享,您的支持将鼓励我继续创作!