是否仅将static用于结构和枚举的静态函数,将class用于类和协议?
那是主要区别。其他一些区别是类函数是动态调度的,并且可以被子类覆盖。
协议使用class关键字,但是它并未从实现协议中排除结构,而是仅使用static。为协议选择了类,因此不必使用第三个关键字来表示静态或类。
来自Chris Lattner的以下主题:
我们考虑统一语法(例如,使用“
type”作为关键字),但这实际上并不简单。关键字“类”和“静态”有助于提高熟悉度,并且具有很好的描述性(一旦您了解+方法的工作原理),并为可能向类中添加真正的静态方法打开了大门。该模型的主要怪异之处在于协议必须选择一个关键字(而我们选择了“类”),但总的来说,这是正确的权衡。
这是显示一些类函数的重写行为的代码段:
class MyClass { class func myFunc() { println("myClass") }}class MyOtherClass: MyClass { override class func myFunc() { println("myOtherClass") }}var x: MyClass = MyOtherClass()x.dynamicType.myFunc() //myOtherClassx = MyClass()x.dynamicType.myFunc() //myClass


