通过 The Swift Programming Language,我惊讶地发现,与结构和枚举不同,类不支持存储类型属性。
这是其他 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 提到的编译器消息的措辞,我不得不得出结论,这只是遗漏了一些(次要的)内容。
最佳答案
编译器错误是“尚不支持类变量”,所以看起来他们还没有实现它。
关于language-design - 为什么在 swift 中没有存储类的类型属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24029581/