//访问控制:访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别。这个特性可以让我们隐藏代码的一些实现细节,并且可以为其他人可以访问和使用的代码提供接口
//一、模块和源文件:
//1、模块:指的是独立的代码单元,框架或应用程序会作为一个独立的模块来构建和发布。在 Swift 中,一个模块可以使用 import 关键字导入另外一个模块
//2、源文件就是 Swift 中的源代码文件,它通常属于一个模块,即一个应用程序或者框架。尽管我们一般会将不同的 类型分别定义在不同的源文件中,但是同一个源文件也可以包含多个类型、函数之类的定义。
//二、访问级别:Swift 为代码中的实体提供了五种不同的访问级别
//1、开放访问和公开访问可以访问同一模块源文件中的任何实体,在模块外也可以通过导入该模块来访问源文件 里的所有实体。通常情况下,框架中的某个接口可以被任何人使用时,你可以将其设置为开放或者公开访问
//2、内部访问可以访问同一模块源文件中的任何实体,但是不能从模块外访问该模块源文件中的实体。通常情况下,某个接口只在应用程序或框架内部使用时,你可以将其设置为内部访问。
//3、文件私有访问限制实体只能被所定义的文件内部访问。当需要把这些细节被整个文件使用的时候,使用文件 隐藏了一些特定功能的实现细节
//4、私有访问限制实体只能在所定义的作用域内使用。需要把这些细节被整个作用域使用的时候,使用文件私有 访问隐藏了一些特定功能的实现细节
//开放访问为最高(限制最少)访问级别,私有访问为最低(限制最多)访问级别
//开放访问只作用于类类型和类的成员,它和公开访问的区别如下:
//1、公开访问或者其他更严访问级别的类,只能在它们定义的模块内部被继承。
//2、公开访问或者其他更严访问级别的类成员,只能在它们定义的模块内部的子类中重写。
//3、开放访问的类,可以在它们定义的模块中被继承,也可以在引用它们的模块中被继承。
//4、开放访问的类成员,可以在它们定义的模块中子类中重写,也可以在引用它们的模块中的子类重写。
//5、把一个类标记为开放,显式地表明,你认为其他模块中的代码使用此类作为父类,然后你已经设计好了你的 类的代码了
//访问级别基本原则:不可以在某个实体中定义访问级别更低(更严格)的实体
//(1)、一个公开访问级别的变量,其类型的访问级别不能是内部,文件私有或是私有类型的。因为无法保证变量的 类型在使用变量的地方也具有访问权限。
//(2)、函数的访问级别不能高于它的参数类型和返回类型的访问级别。因为这样就会出现函数可以在任何地方被访 问,但是它的参数类型和返回类型却不可以的情况。
//6、默认访问级别:如果你不为代码中的实体显式指定访问级别,那么它们默认为 internal 级别
//7、框架的访问级别:当你开发框架时,就需要把一些对外的接口定义为开放访问或公开访问级别,以便使用者导入该框架后可以正常 使用其功能。这些被你定义为对外的接口,就是这个框架的 API
//访问控制语法:通过修饰符open,public,internal,filepart,private 来声明实体的访问级别:
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
public enum CompassPoint {
case North
case South
case East
case West
}
//三、子类:子类的访问级别不得高于父类的访问级别
public class A {
private func someMethod() {}
}
internal class B: A {
}