一尘不染

为什么没有快速存储类的存储类型属性?

swift

通过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提到的编译器消息的措辞,我必须得出结论,这只是一个(次要的)遗漏之处。


阅读 223

收藏
2020-07-07

共1个答案

一尘不染

编译器错误是“尚不支持类变量”,因此似乎他们尚未实现。

2020-07-07