Как объявить функцию уровня класса в Swift?
Я не могу найти его в документах, и мне интересно, существует ли он в native Swift. Например, я могу вызвать функцию класса на NSTimer вот так:
NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: "someSelector:", userInfo: "someData", repeats: true)
но я не могу найти способ сделать это с моими пользовательскими объектами, чтобы я мог назвать это так:
MyCustomObject.someClassLevelFunction("someArg")
теперь я знаю, что мы можем смешивать Objective-C w / Swift, и возможно, что NSTimer метод класса является остатком от этой совместимости.
вопрос
существуют ли функции уровня класса в Swift?
если да, то как определить функцию уровня класса в Swift?
5 ответов:
Да, вы можете создавать функции класса следующим образом:
class func someTypeMethod() { //body }хотя в Swift они называются методами типа.
вы можете определить методы типа внутри класса с:
class Foo { class func Bar() -> String { return "Bar" } }затем получить к ним доступ из имени класса, т. е.:
Foo.Bar()в Swift 2.0 вы можете использовать
staticключевое слово, которое предотвратит переопределение подклассов метода.classпозволит подклассы переопределить.
обновлено: благодаря @Logan
С Xcode 6 beta 5 Вы должны использовать
staticключевое слово для структур иclassключевое слово для классов:class Foo { class func Bar() -> String { return "Bar" } } struct Foo2 { static func Bar2() -> String { return "Bar2" } }
вы указываете методы типа, записывая статическое ключевое слово перед ключевым словом func метода. Классы могут также использовать ключевое слово class, чтобы позволить подклассам переопределять реализацию суперкласса этого метода.
в struct, вы должны использовать
staticдля определения метода типа. Для занятий вы можете использовать либоstaticилиclassключевое слово, в зависимости от того, если вы хотите разрешить ваш метод переопределен подклассом или нет.