访问控制限制其他源文件和模块对你的代码的访问。这个特性允许你隐藏代码的实现细节,并指定一个偏好的接口让其他代码可以访问和使用。
在访问权限控制这块,Swift提供了5个不同的访问级别:
• open: 允许在定义实体的模块、其他模块中访问,允许其他模块进行继承、重写(open只能用在类、类成员上)
• public: 允许在定义实体的模块、其他模块中访问,不允许其他模块进行继承、重写
• internal: 只允许在定义实体的模块中访问,不允许在其他模块中访问
• fileprivate: 只允许在定义实体的源文件中访问
• private: 只允许在定义实体的封闭声明中访问
open、public、internal、fileprivate、private
这些关键字是 Swift 为代码的实体提供个五个不同的访问级别。这些访问级别和定义实体的源文件相关,并且也和源文件所属的模块相关。
open 访问是最高的(限制最少)访问级别,private 是最低的(限制最多)访问级别。
private
private 访问, 将实体的使用限制于封闭声明中。当一些细节仅在单独的声明中使用时,使用 private 访问隐藏特定功能的实现细节。
fileprivate
File-private 访问, 将实体的使用限制于当前定义源文件中。当一些细节在整个文件中使用时,使用 file-private 访问隐藏特定功能的实现细节。
internal
Internal 访问, 为默认访问级别, 允许实体被定义模块中的任意源文件访问,但不能被该模块之外的任何源文件访问。通常在定义应用程序或是框架的内部结构时使用。
public、open
public 访问和Open 访问, 允许实体被定义模块中的任意源文件访问,同样可以被另一模块的源文件通过导入该定义模块来访问。在指定框架的公共接口时,通常使用 open 或 public 访问。
public 访问只能在当前模块中被继承和子类重写。
open 访问仅适用于类和类成员,可以在其他模块外被继承和子类重写。
显式地标记类为 open 意味着你考虑过其他模块使用该类作为父类对代码的影响,并且相应地设计了类的代码。
访问控制的注意事项
Swift 中的访问级别遵循一个总体指导准则:实体不可以被更低(限制更多)访问级别的实体定义。
比如: 一个 public 的变量其类型的访问级别不能是 internal, file-private 或是 private,因为在使用 public 变量的地方可能没有这些类型的访问权限。
又比如: 函数类型的访问级别由函数成员类型和返回类型中的最严格访问级别决定。一个函数不能比它的参数类型和返回类型访问级别高,因为函数可以使用的环境而其参数和返回类型却不能使用。
这里简单列举了两个有关访问级别的使用注意事项。想了解有更多详细的注意事项的朋友, 可以查阅我的另外一篇博文: Swift 之访问控制。这里面有代码举例和详细说明, 小编这里不再赘述。
http://blog.csdn.net/wangyanchang21/article/details/78952144