不能在类中使用静态方法/变量的原因是什么



我想知道为什么你不能在类中使用static关键字。我知道您可以在struct中使用它,但不能在class
有谁知道他们为什么选择这样做?如果是这样,放static有什么好处吗?

这是一个术语。苹果所做的是决定在枚举或结构中使用static,在类中使用class。在我看来,这是一个非常愚蠢的决定,因为它们彼此完全平行。许多人在开发论坛上发帖建议他们只是称他们为static

结果是奥卡姆剃刀的候选者:两个短语,例如静态属性和类属性,或静态方法和类方法,意思完全相同。然后,他们试图通过添加第三个术语作为保护伞来掩盖他们在文档中的踪迹,"类型属性"(意味着静态或类属性(或"类型方法"(意味着静态或类方法(,这只会使情况变得更糟。

这种情况的糟糕之处也通过您在协议中必须做的事情来揭示:您在协议中声明一个class属性,然后如果结构采用它,它就会调用该属性static属性。协议中的class方法也是如此;采用结构必须将其称为static方法。你会认为仅凭这一点就可以告诉他们他们做了一件坏事。

编辑:我想得越多,我就越喜欢newacct在下面的评论中提出的建议。如果苹果只是在这里使用umbrella关键字type作为语言的一部分,整个问题就会得到解决。我们可以有声明type vartype lettype func,这将在枚举、结构、类和协议中同样有效。

在 Swift Language Guide on Methods,Apple 选择根据您正在构建的基本类型来区分所使用的语法。

类使用关键字 Class 声明"类型方法"。 例:

class MyClass {
    class func myFunc(){ ... }
}

结构体使用关键字 Static 声明"类型方法"。 例:

struct MyStruct {
    static func myFunc(){ ... }
}

在这两种情况下,创建类型方法都允许您调用该方法,而无需先创建类或结构的实例。

而非类/静态函数需要类似的东西

let instance = MyClass()
instance.myFunc()

。将变量声明为类型方法允许类似 MyClass.myFunc()

最新更新