声明不能标记为"静态",为什么



我有一个School结构:

public struct School {
  ...
}

然后,我有一个扩展名,在其中声明一个静态枚举:

extension School {
  // Compiler error: Declaration cannot be marked 'static'
  static enum Level: String {
     case Middle = "middle"
  }
}

但是我有上面注释中提到的编译器错误,我该如何在扩展中声明静态枚举?

enum是一种类型,因此不能将其标记为静态。即使您在类中声明enum,它也可以通过类型而不是通过实例访问。在Swift中,static关键字可用于标记类型属性,但是由于enum是一种类型本身,因此不能是属性,因此不能标记static

struct School {
}
extension School {
    enum Level: String {
        case Middle = "middle"
    }
}

您可以通过School类型访问enum,而无需创建一个实例。

School.Level.Middle

只有类型的属性和方法才能标记为静态。(枚举是类似于struct的值类型)。除了您的类具有静态方法或属性的类,并要求将其分类为阶级,而不是静态。

在Java中,内部类型可以访问封闭类型的成员。static关键字用于阻止此类访问,并指示该类型独立于其封闭类型的成员。

Swift从一开始就不会这样做,因此它不适用于static内部类型。

最新更新