我有一个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
内部类型。