Swift 中受保护的访问级别

作者:编程家 分类: swift 时间:2025-07-24

在 Swift 中,我们可以使用访问控制来限制代码的访问级别。通过使用不同的访问级别,我们可以确保代码的安全性和可维护性。Swift 中的受保护的访问级别包括私有访问级别、文件私有访问级别、内部访问级别和公开访问级别。让我们逐一了解这些访问级别,并看看如何在代码中使用它们。

私有访问级别

私有访问级别是 Swift 中最严格的访问级别。它将代码限制在特定的声明或上下文中,只允许在同一文件中访问。私有成员只对定义它们的代码可见,不对其他任何代码可见。这种访问级别适用于需要在特定实现中使用的细节或辅助类型。

下面是一个使用私有访问级别的示例代码:

swift

class MyClass {

private var privateVar = 10

private func privateMethod() {

print("This is a private method.")

}

func publicMethod() {

print("This is a public method.")

privateMethod()

}

}

let myObject = MyClass()

myObject.publicMethod() // 输出:"This is a public method." \n "This is a private method."

myObject.privateVar // 编译错误:'privateVar' is inaccessible due to 'private' protection level

myObject.privateMethod() // 编译错误:'privateMethod' is inaccessible due to 'private' protection level

在上面的代码中,`privateVar` 和 `privateMethod` 都被声明为私有。因此,在同一文件中,我们可以访问 `publicMethod`,但无法直接访问 `privateVar` 或 `privateMethod`。

文件私有访问级别

文件私有访问级别将代码限制在同一源文件中,只允许在该文件中访问。这种访问级别适用于需要在整个文件中使用的细节或辅助类型。与私有访问级别不同,文件私有访问级别允许其他类型在同一文件中访问。

下面是一个使用文件私有访问级别的示例代码:

swift

fileprivate struct MyStruct {

fileprivate var fileprivateVar = 20

fileprivate func fileprivateMethod() {

print("This is a fileprivate method.")

}

func publicMethod() {

print("This is a public method.")

fileprivateMethod()

}

}

let myStructObject = MyStruct()

myStructObject.publicMethod() // 输出:"This is a public method." \n "This is a fileprivate method."

myStructObject.fileprivateVar // 编译错误:'fileprivateVar' is inaccessible due to 'fileprivate' protection level

myStructObject.fileprivateMethod() // 编译错误:'fileprivateMethod' is inaccessible due to 'fileprivate' protection level

在上面的代码中,`fileprivateVar` 和 `fileprivateMethod` 都被声明为文件私有。因此,在同一文件中,我们可以访问 `publicMethod` 和 `fileprivateVar`,但无法直接访问 `fileprivateMethod`。

内部访问级别

内部访问级别将代码限制在同一模块中,只允许在该模块中访问。模块是指一个应用程序或框架的独立单元,可以被单独编译和分发。这种访问级别适用于需要在整个模块中使用的实体。

下面是一个使用内部访问级别的示例代码:

swift

internal class MyInternalClass {

internal var internalVar = 30

internal func internalMethod() {

print("This is an internal method.")

}

func publicMethod() {

print("This is a public method.")

internalMethod()

}

}

let myInternalObject = MyInternalClass()

myInternalObject.publicMethod() // 输出:"This is a public method." \n "This is an internal method."

myInternalObject.internalVar // 输出:30

myInternalObject.internalMethod() // 输出:"This is an internal method."

在上面的代码中,`internalVar` 和 `internalMethod` 都被声明为内部访问级别。因此,在同一模块中,我们可以访问 `publicMethod`、`internalVar` 和 `internalMethod`。

公开访问级别

公开访问级别是最高的访问级别,没有任何限制。公开访问级别允许实体被定义模块之外的代码访问和使用。这种访问级别适用于需要在其他模块中使用的公共接口。

下面是一个使用公开访问级别的示例代码:

swift

public enum MyPublicEnum {

public var publicVar = 40

public func publicMethod() {

print("This is a public method.")

}

func internalMethod() {

print("This is an internal method.")

}

}

let myPublicEnumObject = MyPublicEnum()

myPublicEnumObject.publicMethod() // 输出:"This is a public method."

myPublicEnumObject.internalMethod() // 编译错误:'internalMethod' is inaccessible due to 'internal' protection level

myPublicEnumObject.publicVar // 输出:40

在上面的代码中,`publicVar` 和 `publicMethod` 都被声明为公开访问级别。因此,在任何模块中,我们都可以访问 `publicMethod` 和 `publicVar`。

在 Swift 中,我们可以使用受保护的访问级别来控制代码的访问范围。私有访问级别限制在同一文件中,文件私有访问级别限制在同一源文件中,内部访问级别限制在同一模块中,而公开访问级别没有限制。根据具体的需求,我们可以选择适当的访问级别来保护代码并确保其可访问性。

参考链接:

- [访问控制 - Swift 官方文档](https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html)