通过Swift编程语言,我惊讶地发现,与结构和枚举不同,类不支持存储的类型属性。
这是其他OO语言的共同特征,因此我认为有充分的理由他们决定不允许它。但是我无法猜测出这个原因是什么,尤其是由于结构(和枚举)拥有它们。
难道仅仅是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"
编辑:
我现在意识到可以解决此限制,例如,通过使用具有存储属性的嵌套结构:
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提到的编译器消息的措辞,我必须得出结论,这只是一个(次要的)遗漏之处。
编译器错误是“尚不支持类变量”,因此似乎他们尚未实现。