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

时间:2014-12-19 18:31:26

标签: swift static

我想知道为什么你不能在课堂上使用static关键字。 我知道您可以在struct中使用它,但不能在class中使用它 有谁知道他们为什么选择这个? 如果是这样,让static离开会有什么好处?

2 个答案:

答案 0 :(得分:7)

这是术语bêtise。 Apple所做的是决定你在枚举或结构中使用static而在类中使用class。在我看来,这是一个非常愚蠢的决定,因为它们完全相互平行。很多人都在开发论坛上发帖,建议他们全部称呼static

结果是奥卡姆剃刀的候选人:两个短语,例如静态属性和类属性,或静态方法和类方法,意思完全相同。然后他们尝试在文档中添加第三个术语作为保护,“类型属性”(意为静态或类属性)或“类型方法”(意味着静态或类方法),这使情况更糟。

在协议中你必须做的事情也揭示了这种情况的不良:你在协议中声明了一个class属性,然后如果一个结构采用它,它会调用static属性。与协议中的class方法相同;采用结构必须调用static方法。你认为仅此一点就会告诉他们他们做了一件坏事。

修改:我想的越多,我就越喜欢newacct在下面评论中提出的提案。如果Apple只使用伞形关键字type这里作为语言的一部分,整个问题就会得到解决。我们可以声明type vartype lettype func,这样就可以在枚举,结构,类和协议中同样发挥作用。

答案 1 :(得分:1)

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()