我有一个School
结构:
public structure School {
...
}
然后,我有一个扩展名,我在其中声明了一个静态枚举:
extension School {
// Compiler error: Declaration cannot be marked 'static'
static enum Level: String {
case Middle = "middle"
}
}
但是我在上面的评论中提到了编译器错误,如何在扩展中声明静态枚举呢?
答案 0 :(得分:5)
enum
是一种类型,因此无法标记为静态。即使您在类中声明了enum
,也可以通过类类型而不是通过实例来访问它。在Swift中,static
关键字可用于标记类型属性,但由于enum
本身是一种类型,因此它不能是属性,因此无法标记为static
。
struct School {
}
extension School {
enum Level: String {
case Middle = "middle"
}
}
您可以通过enum
类型访问School
,无需创建实例。
School.Level.Middle
答案 1 :(得分:1)
只能将类型的属性和方法标记为静态。 (Enum是类似struct的值类型)此外,如果你有一个具有静态方法或属性的类并且要求它被子类化,那么它应该被标记为class而不是static。
答案 2 :(得分:0)
在Java中,内部类型可以访问封闭类型的成员。 static
关键字用于阻止此类访问,并指示该类型独立于其封闭类型的成员。
Swift从一开始就没有这样做,所以它不能用于static
内部类型。