在 Swift 中,我们可以使用访问控制来限制代码的访问级别。通过使用不同的访问级别,我们可以确保代码的安全性和可维护性。Swift 中的受保护的访问级别包括私有访问级别、文件私有访问级别、内部访问级别和公开访问级别。让我们逐一了解这些访问级别,并看看如何在代码中使用它们。
私有访问级别私有访问级别是 Swift 中最严格的访问级别。它将代码限制在特定的声明或上下文中,只允许在同一文件中访问。私有成员只对定义它们的代码可见,不对其他任何代码可见。这种访问级别适用于需要在特定实现中使用的细节或辅助类型。下面是一个使用私有访问级别的示例代码:swiftclass 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 levelmyObject.privateMethod() // 编译错误:'privateMethod' is inaccessible due to 'private' protection level在上面的代码中,`privateVar` 和 `privateMethod` 都被声明为私有。因此,在同一文件中,我们可以访问 `publicMethod`,但无法直接访问 `privateVar` 或 `privateMethod`。文件私有访问级别文件私有访问级别将代码限制在同一源文件中,只允许在该文件中访问。这种访问级别适用于需要在整个文件中使用的细节或辅助类型。与私有访问级别不同,文件私有访问级别允许其他类型在同一文件中访问。下面是一个使用文件私有访问级别的示例代码:
swiftfileprivate 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 levelmyStructObject.fileprivateMethod() // 编译错误:'fileprivateMethod' is inaccessible due to 'fileprivate' protection level在上面的代码中,`fileprivateVar` 和 `fileprivateMethod` 都被声明为文件私有。因此,在同一文件中,我们可以访问 `publicMethod` 和 `fileprivateVar`,但无法直接访问 `fileprivateMethod`。内部访问级别内部访问级别将代码限制在同一模块中,只允许在该模块中访问。模块是指一个应用程序或框架的独立单元,可以被单独编译和分发。这种访问级别适用于需要在整个模块中使用的实体。下面是一个使用内部访问级别的示例代码:
swiftinternal 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 // 输出:30myInternalObject.internalMethod() // 输出:"This is an internal method."在上面的代码中,`internalVar` 和 `internalMethod` 都被声明为内部访问级别。因此,在同一模块中,我们可以访问 `publicMethod`、`internalVar` 和 `internalMethod`。公开访问级别公开访问级别是最高的访问级别,没有任何限制。公开访问级别允许实体被定义模块之外的代码访问和使用。这种访问级别适用于需要在其他模块中使用的公共接口。下面是一个使用公开访问级别的示例代码:
swiftpublic 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 levelmyPublicEnumObject.publicVar // 输出:40在上面的代码中,`publicVar` 和 `publicMethod` 都被声明为公开访问级别。因此,在任何模块中,我们都可以访问 `publicMethod` 和 `publicVar`。在 Swift 中,我们可以使用受保护的访问级别来控制代码的访问范围。私有访问级别限制在同一文件中,文件私有访问级别限制在同一源文件中,内部访问级别限制在同一模块中,而公开访问级别没有限制。根据具体的需求,我们可以选择适当的访问级别来保护代码并确保其可访问性。参考链接:- [访问控制 - Swift 官方文档](https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html)