Как объявить функцию уровня класса в 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
ключевое слово, в зависимости от того, если вы хотите разрешить ваш метод переопределен подклассом или нет.