Swift iOS 中的访问控制

2025年3月17日 | 阅读 3 分钟

在编程中,有时我们需要限制对代码的某些特定部分进行访问,以防止不需要的部分或模块访问。在 Swift 中,我们可以使用访问控制来实现这一点,它可以限制对代码的某些部分进行访问,以防止其他源文件和模块中的不需要的代码访问。访问控制有助于我们隐藏代码的实现细节。这允许我们指定一个可以访问和使用代码的平台。

在本文中,我们将讨论如何为各个类型(包括类、结构和枚举)指定不同的访问级别。我们可以为 Swift 值和引用类型(如类、结构和枚举)提供不同的访问级别。我们还可以为它们的属性、方法、初始化器和下标分配访问级别。

Swift 还为各个类型提供默认的访问级别,因此我们无需为每种类型显式地分配各种访问控制级别。

什么是模块和源文件?

Swift 基于模块和源文件提供访问控制。模块是我们代码中可以分组的部分。它可以重复使用在我们代码的不同地方,而无需再次编写代码。在 XCode 中,每个构建目标都用作一个单独的模块。源文件包含模块中各个 Swift 源代码的源代码。但是,我们可以在源文件中定义单独的类型,包括类、结构、函数、枚举等。

访问级别

Swift 中有五种不同的访问级别。Swift 根据包含实体的源文件对这些访问级别进行分类。它也相对于包含源文件的模块。

1. 开放访问级别

开放访问级别允许在定义模块中的任何源文件中使用实体。它还允许我们在另一个导入定义模块的模块的源文件中使用该实体。我们需要使用开放访问来指定框架的公共接口。

2. 公共访问级别

公共访问级别允许在定义模块中的任何源文件中使用实体。它还允许我们在另一个导入定义模块的模块的源文件中使用该实体。我们需要使用公共访问来指定框架的公共接口。

3. 内部访问级别

内部访问限制模块级别的实体。它允许在定义模块的任何源文件中使用实体,但不能在该模块之外的源文件中使用。我们使用内部访问来定义应用程序的内部结构。

4. 文件私有访问级别

文件私有访问限制源文件级别的实体。它允许在其定义的源文件中使用实体。文件私有访问用于隐藏整个文件中使用的功能的实现细节。

5. 私有访问级别

私有访问为实体提供最高级别的限制。它只允许在封闭声明中使用实体。它也可以在同一文件中声明的扩展中使用。我们对仅在单个声明中定义的功能使用私有访问。

开放访问级别限制性最低,而私有访问是限制性最高的访问级别。我们必须注意公共和开放访问级别之间的区别。开放访问级别只能应用于类和类成员。它与公共访问级别不同,因为它允许模块外的代码进行子类化和覆盖。

在这里,我们需要确保实体不能在具有较低访问级别的实体内部(就条款而言)定义。例如,我们不能定义具有内部、私有、文件私有类型的公共变量。

Swift 默认将我们代码中的所有实体定义为具有内部访问级别。它允许我们不在代码中指定显式级别。

访问控制语法

我们可以在声明 Swift 变量时使用 open、public、internal、fileprivate 和 private 关键字。