通过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"
Run Code Online (Sandbox Code Playgroud)
编辑:
我现在意识到这种限制很容易解决,例如,通过使用具有存储属性的嵌套结构:
class Foo {
struct Stored {
static var prop1 = "a stored prop"
} …Run Code Online (Sandbox Code Playgroud) 扩展不能包含存储属性,但为什么可以在扩展中定义静态存储属性?
我也没有找到任何文档提到扩展中允许静态属性.
extension String {
static let test = "Test"
static var test2 = "Test2"
}
Run Code Online (Sandbox Code Playgroud)