Swift类型属性

关于属性的另一件事是,您还可以在类型本身(类,结构,枚举)上定义它们。 当您想要定义与该类型的所有实例相同的属性时很有用。

类型属性的好处:

  • 您可以访问它们而无需创建该特定类型的新对象。
  • 这些类型属性区域可用于该特定类型的任何实例

类型属性既可以是计算属性也可以是存储属性(var或let)。 但是,在类中,要在子类中重写的类型属性只能是计算属性。 如果尝试其他方法,将得到此错误: 错误:类中不支持的类存储属性; 您是说“静态”吗?

由于类型属性中缺少初始化,因此您需要提供默认值,但是无需初始化类型就可以访问它。

就使用的关键字而言,值类型(结构和枚举)与引用类型(类)之间存在微小但相关的差异。

结构/枚举:

  • struct和enum中的类型属性以关键字struct开头

类:

  • 如果类型属性不是要被子类覆盖,则类中的类型属性(由于其引用类型)将使用关键字static;如果是,则使用关键字类 (在这种情况下,在子类中,您还必须使用关键字重写以向编译器发出信号,表明子类正在实现其自己的type属性)
  • 另外,如果要使用关键字class以便可以在子类中更改属性,则似乎无法在存储的属性上使用它。
  • 另一个重要的区别是,类中的静态属性不能被子类覆盖,但是子类可以通过点语法使用它(您可以通过在类型属性中使用类型名称,后接点(。)和类型属性的名称)。

您可以使用OctagonSide2看到它,它可以从其超类访问静态属性