我想知道为什么你不能在课堂上使用static
关键字。
我知道您可以在struct
中使用它,但不能在class
中使用它
有谁知道他们为什么选择这个?
如果是这样,让static
离开会有什么好处?
答案 0 :(得分:7)
这是术语bêtise。 Apple所做的是决定你在枚举或结构中使用static
而在类中使用class
。在我看来,这是一个非常愚蠢的决定,因为它们完全相互平行。很多人都在开发论坛上发帖,建议他们全部称呼static
。
结果是奥卡姆剃刀的候选人:两个短语,例如静态属性和类属性,或静态方法和类方法,意思完全相同。然后他们尝试在文档中添加第三个术语作为保护,“类型属性”(意为静态或类属性)或“类型方法”(意味着静态或类方法),这使情况更糟。
在协议中你必须做的事情也揭示了这种情况的不良:你在协议中声明了一个class
属性,然后如果一个结构采用它,它会调用static
属性。与协议中的class
方法相同;采用结构必须调用static
方法。你认为仅此一点就会告诉他们他们做了一件坏事。
修改:我想的越多,我就越喜欢newacct
在下面评论中提出的提案。如果Apple只使用伞形关键字type
这里作为语言的一部分,整个问题就会得到解决。我们可以声明type var
,type let
,type 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()