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

Bas*_*Bas 0 static swift

我想知道为什么你不能static在课堂上使用关键字.我知道你可以在一个struct但不在一个中使用它有class
没有人知道他们为什么选择这个?如果是这样的话,有什么好处可以放手static

mat*_*att 7

这是一个术语性的bêtise.Apple所做的是决定你static在枚举,结构和class类中使用.在我看来,这是一个非常愚蠢的决定,因为它们彼此完全平行.很多人都在开发论坛上发帖说他们只是打电话给他们static.

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

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

编辑:我想的越多,我就越喜欢newacct下面评论中提出的建议.如果Apple只是在type这里使用伞形关键字作为语言的一部分,整个问题就会得到解决.我们可以有声明type var,type let,type func,,这将在枚举,结构,类和协议全线平等合作.