通过Swift编程语言,我惊讶地发现,与结构和枚举不同,类不支持存储类型属性。
这是其他OO语言的一个共同特征,所以我认为有一个很好的理由,他们决定不允许它。但我不能猜到这是什么原因,特别是因为结构(和枚举)有它们。
这只是说它是早期的Swift,它只是还没有实现呢?还是有更深的理由背后的语言设计决策?
BTW,“存储类型属性”是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"
编辑:
我现在意识到这个限制是微不足道的工作,例如,通过使用具有存储属性的嵌套结构:
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提到的编译器消息的措辞,我必须得出结论,这只是一些(次要的)遗漏。