通过使用Swift编程语言,我惊讶地发现,与 struct 和枚举不同,类不支持存储类型属性.
这是其他OO语言的一个共同特征,所以我认为他们决定不允许它是有充分理由的.但我猜不出原因是什么,尤其是因为 struct (和枚举)有它们.
是否只是因为Swift还处于早期阶段,尚未实施?还是语言设计决策背后有更深层次的原因?
顺便说一句,"存储类型属性"是Swift术语.在其他语言中,这些变量可能被称为类变量.示例代码:
struct FooStruct {
static var storedTypeProp = "struct stored property is OK"
}
FooStruct.storedTypeProp // evaluates to "struct stored property is OK"
class FooClass {
class var computedClassProp: String { return "computed class property is OK" }
// class var storedClassProp = "class property not OK" // this won't compile
}
FooClass.computedClassProp // evaluates to "computed class property is OK"
编辑:
我现在意识到,解决这个限制很简单,例如,通过使用带有存储属性的嵌套 struct :
class Foo {
struct Stored {
static var prop1 = "a stored prop"
}
}
Foo.Stored.prop1 // evaluates to "a stored prop"
Foo.Stored.prop1 = "new value"
Foo.Stored.prop1 // evaluates to "new value"
这似乎排除了它们成为这种局限性的深层次、难以理解的语言设计原因.
考虑到这一点以及Martin Gordon提到的编译器消息的措辞,我不得不得出结论,这只是遗漏了一些(次要的)东西.