返回

Swift 进阶 11:访问控制权限深析

IOS

private

private 用于将元素的访问权限限制在当前定义的作用域内。这意味着只有在元素所在的文件中才能访问它。

例如,在一个名为 Person.swift 的文件中,我们可以定义一个名为 name 的私有属性:

private var name: String

只有在 Person.swift 文件中才能访问 name 属性。在其他文件中,即使是在同一个模块中,都不能访问 name 属性。

fileprivate

fileprivate 关键字用于将元素的访问权限限制在当前定义的文件中。这意味着只有在元素所在的文件中及其同文件中的其他类型中才能访问它。

例如,在一个名为 Person.swift 的文件中,我们可以定义一个名为 agefileprivate 属性:

fileprivate var age: Int

只有在 Person.swift 文件中及其同文件中的其他类型中才能访问 age 属性。在其他文件中,即使是在同一个模块中,都不能访问 age 属性。

internal

internal 关键字用于将元素的访问权限限制在当前模块中。这意味着只有在元素所在模块中的文件和类型中才能访问它。

例如,在一个名为 Person.swift 的文件中,我们可以定义一个名为 genderinternal 属性:

internal var gender: String

只有在 Person.swift 文件所在模块中的文件和类型中才能访问 gender 属性。在其他模块中,即使是在同一个项目中,都不能访问 gender 属性。

public

public 关键字用于将元素的访问权限设置为公开。这意味着可以在任何地方访问它。

例如,在一个名为 Person.swift 的文件中,我们可以定义一个名为 addresspublic 属性:

public var address: String

可以在任何地方访问 address 属性。

open

open 关键字用于将元素的访问权限设置为开放。这意味着可以在任何地方访问它,并且可以被子类覆盖。

例如,在一个名为 Person.swift 的文件中,我们可以定义一个名为 descriptionopen 方法:

open func description() -> String {
  return "Person(name: \(name), age: \(age), gender: \(gender), address: \(address))"
}

可以在任何地方访问 description 方法,并且可以被子类覆盖。

访问控制权限总结

访问控制权限 可访问性
private 仅在当前定义的作用域内
fileprivate 仅在当前定义的文件中及其同文件中的其他类型中
internal 仅在当前模块中
public 可以在任何地方
open 可以在任何地方,并且可以被子类覆盖

实例演示

为了更好地理解访问控制权限的用法,我们来看一个实例。

我们有一个名为 Person 的类,它表示一个人。Person 类具有以下属性:

  • name:字符串,表示人的姓名。
  • age:整数,表示人的年龄。
  • gender:字符串,表示人的性别。
  • address:字符串,表示人的地址。

我们还可以为 Person 类定义一个名为 description() 的方法,该方法返回一个字符串,人的信息。

class Person {
  private var name: String
  fileprivate var age: Int
  internal var gender: String
  public var address: String

  init(name: String, age: Int, gender: String, address: String) {
    self.name = name
    self.age = age
    self.gender = gender
    self.address = address
  }

  open func description() -> String {
    return "Person(name: \(name), age: \(age), gender: \(gender), address: \(address))"
  }
}

现在,我们可以在任何地方使用 Person 类。例如,我们可以创建一个 Person 对象并打印其信息:

let person = Person(name: "John Doe", age: 30, gender: "male", address: "123 Main Street")
print(person.description())

输出结果为:

Person(name: John Doe, age: 30, gender: male, address: 123 Main Street)

总结

访问控制权限是 Swift 中一项重要的特性,它可以帮助我们控制代码的访问权限,从而提高代码的可读性和安全性。

在本文中,我们介绍了 Swift 中的五种访问控制权限:private、fileprivate、internal、public 和 open。我们还通过实例演示了如何应用这些关键字来控制代码的访问权限。

希望本文对您有所帮助。