socket.emit () против socket.send ()

Это просто, что 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() //myOtherClass
x = MyClass()
x.dynamicType.myFunc() //myClass
124
задан Hulk1991 17 June 2013 в 07:11
поделиться