我在之前的笔记《项目基本架构的搭建》中提到过访问级别,这里再做一个详细的补充。Swift提供了5种访问级别,分别为open、public、internal、fileprivate和private。它们既可以修饰类、结构体、枚举等面向对象的类型,也可以修饰变量、常量、下标、元组、函数和属性等类型。其具体的含义为:
- open:其访问限制是最小的,任何被open修饰的实体,无论是在自己的模块内部,还是在其它模块内,都可以被访问;
- public:在同一个模块中,public和open完全一样。但是在不同的模块中,被public所修饰的类不能够被继承,被public所修饰的属性和方法不能被重写;
- internal:它是默认的访问限定,被internal所修饰的实体只能在自己模块中被访问;
- fileprivate:被fileprivate所修饰的实体只能在当前源文件中被访问;
- private:private是真正意义上的“私有”,被private所修饰的实体只能在实体内部被访问。
在上面所说的实体,主要是指类、结构体、枚举、变量、常量、下标、元组、函数和属性等类型。这些访问限制具体该如何使用呢?具体使用情况如下:
- 如果类、结构体和枚举被定义为internal或者private,那么它们所声明的变量或者常量不能使用public访问级别。因为被public所修饰的变量或者常量可以被任何人访问,而internal和private则不是;
- 函数的访问级别不能高于它的参数和返回类型的访问级别。比如说,如果函数被声明为public,而他的参数或者返回类型被声明为internal或者private,那么就会出现函数可以被任何人访问,而它的参数和返回类型则不可以被访问,这样会产生严重的问题;
- 一般而言,在开发框架时,供别人使用的,应该设置为public,而不希望别人看到的东西,应该设置为internal或者private;
- 在当前源文件中,只供自己使用的属性或者方法,一般应该设置为fileprivate。