language-design - 为什么在 swift 中没有存储类的类型属性?

标签 language-design swift

通过 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/

相关文章:

c++ - 使用 LLVM IR 实现动态类型语言

oop - 为什么 oop 语言不支持单独的读写访问修饰符?

c++ - 为什么空表达式在 C/C++ 中是合法的?

c++ - Qt 是否属于 C++ 库?如果不是库,你会如何对 QT 进行分类?

programming-languages - 使用 EBNF 描述运算符优先级

ios - 与名为 com.apple.commcenter.coretelephony.xpc 的服务的连接已失效

ios - 用于共享屏幕截图的事件 Controller 显示为空

swift - 在 swift 应用程序中构建 Alamofire 请求的体面方式

ios - 动态添加内容到 UIScrollView

ios - ViewController 在 didSelectRowAtIndexPath 中缓慢呈现