📜  Foundation-可见性类(1)

📅  最后修改于: 2023-12-03 15:00:50.725000             🧑  作者: Mango

Foundation-可见性类

在开发 iOS 应用程序时,为了实现更好的封装性和可维护性,我们需要对类的可见性进行控制。在 Objective-C 中,我们可以使用 @public@protected@private 关键字来控制类成员的可见性。然而,在 Swift 中,可见性的控制方式有所不同。

Swift 提供了 5 种不同的访问级别,分别是:

  • open:允许在定义类的模块以外继承和重载类;
  • public:可以被任何人访问,但只能在定义类的模块内被继承和重载;
  • internal:只能在定义类的模块内被访问;
  • fileprivate:只能在定义类的源文件中被访问;
  • private:只能在定义类中的作用域内被访问。

其中,openpublic 是对外暴露的访问级别,而 internalfileprivateprivate 则是对内部使用的访问级别。

使用方式

可以使用 publicinternalfileprivateprivate 这 4 种访问级别来控制类成员的可见性。默认情况下,不加修饰符的类成员都是 internal 级别的。

class MyClass {
  public var myPublicVar = 0
  internal var myInternalVar = 0
  fileprivate var myFileprivateVar = 0
  private var myPrivateVar = 0
}

除了类成员之外,我们还可以使用这些访问级别来控制函数、方法、属性、下标等成员的可见性。

public class MyClass {
  public func myPublicFunc() {}
  internal func myInternalFunc() {}
  fileprivate func myFileprivateFunc() {}
  private func myPrivateFunc() {}

  public var myPublicVar: Int = 0
  internal var myInternalVar: Int = 0
  fileprivate var myFileprivateVar: Int = 0
  private var myPrivateVar: Int = 0
}
使用建议

在平时开发过程中,建议尽量使用 privatefileprivateinternal 这 3 种访问级别来控制类成员的可见性。这样做可以保证代码的安全性和可维护性。

如果需要对外暴露接口,可以使用 publicopen 这 2 种访问级别。publicopen 的区别在于,open 可以被外部模块继承和重载,而 public 不允许被继承和重载。

open class MyOpenClass {
  open func myOpenFunc() {}
  public func myPublicFunc() {}
}

public class MyPublicClass {
  public func myPublicFunc() {}
}
总结

在 Swift 中,我们可以使用 publicinternalfileprivateprivate 这 4 种访问级别来控制类成员的可见性。其中,publicopen 是对外暴露的访问级别,而 internalfileprivateprivate 则是对内部使用的访问级别。建议在开发过程中尽量使用 privatefileprivateinternal 这 3 种访问级别来控制类成员的可见性。