Swift学习笔记(二)---访问控制

Swift中的访问权限

swift中的访问控制模型基于模块源文件两个概念。

  • 模块指的是独立的代码单元,也就是使用import关键字导入的内容
  • 源文件指的是swift中的源码,同一个源文件可以包含多个类型、函数

访问级别

swift中的访问级别有5种。

open和public

openpublic级别可以让实体被同一模块源文件中的所有实体访问,在模块外可以通过import导入来访问。如Xcode中的每个target就是独立的模块,需要使用import导入使用。

  • open 为限制最少的最高访问级别

  • open 只能作用于类和类的成员它和public区别如下:

    • public 或者其他更严格访问级别的类,只能在其定义的模块内部被继承
    • public或者其他更严访问级别的类成员,只能在其定义的模块内部的子类中重写
    • open的类可以在其定义的模块中被继承,也可以在引用它的模块中被继承
    • open的类成员可以在其定义的模块子类中重写,也可以在引用它的模块中的子类重写
    1
    2
    public class SomePublicClass {}
    public var somePublicVariable = 0

internal

internal级别让实体被同一模块源文件中的任何实体访问,但是不能被模块外的实体访问。大多数情况下默认为internal级别。

通常在设计接口时,如果只在应用程序或者框架内使用的使用可以定义为internal级别

File-private

限制实体只能在其定义的文件内部访问。 通常用来隐藏文件内部实现细节

Private

private为限制最多的最低访问级别,限制实体只能在定义的作用域内以及同一文件内的extension访问。