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

Lee*_*fin -1 enums swift

我有一个School结构:

public structure School {
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

extension School {
  // Compiler error: Declaration cannot be marked 'static'
  static enum Level: String {
     case Middle = "middle"
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我在上面的评论中提到了编译器错误,如何在扩展中声明静态枚举呢?

Dáv*_*tor 6

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

struct School {

}

extension School {
    enum Level: String {
        case Middle = "middle"
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以enum通过School类型访问,不需要创建实例.

School.Level.Middle
Run Code Online (Sandbox Code Playgroud)