Как я объявляю функцию уровня класса в Swift?

Я, может казаться, не нахожу его в документах, и я задаюсь вопросом, существует ли это в собственном компоненте Swift. Например, я могу вызвать функцию уровня класса на NSTimer как так:

NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: "someSelector:", userInfo: "someData", repeats: true)

Но я, может казаться, не нахожу способ сделать это с моими пользовательскими объектами так, чтобы я мог назвать его как:

MyCustomObject.someClassLevelFunction("someArg")

Теперь, я знаю, что мы можем смешать Objective C w/Swift, и возможно что NSTimer метод класса является остатком от той совместимости.

Вопрос

  1. Действительно ли класс выравнивается, функции существуют в Swift?

  2. Если да, как я определяю функцию уровня класса в Swift?

62
задан 3 June 2014 в 09:51

5 ответов

Да, можно создать функции класса как это:

class func someTypeMethod() {
    //body
}

, Хотя в Быстром, их называют методами Типа.

111
ответ дан 31 October 2019 в 13:23

Можно определить методы Типа в классе с:

class Foo {
    class func Bar() -> String {
        return "Bar"
    }
}

Затем получают доступ к ним от имени класса, т.е.:

Foo.Bar()

В Быстрых 2.0 можно использовать static ключевое слово, которое будет препятствовать тому, чтобы подклассы переопределили метод. class позволит подклассам переопределять.

38
ответ дан 31 October 2019 в 13:23

ОБНОВЛЕННЫЙ: Благодаря @Logan

С бетой 5 Xcode 6 необходимо использовать static ключевое слово для структур и class ключевое слово для классов:

class Foo {
    class func Bar() -> String {
        return "Bar"
    }
}

struct Foo2 {
    static func Bar2() -> String {
        return "Bar2"
    }
}
15
ответ дан 31 October 2019 в 13:23

От официальный документ Swift 2.1:

Вы указываете на методы типа путем записи статического ключевого слова перед method’s func ключевое слово. Классы могут также использовать ключевое слово класса, чтобы позволить подклассам переопределять superclass’s реализацию того метода.

В структуре, необходимо использовать static для определения метода Типа. Для классов можно использовать или static или class ключевое слово, в зависимости от того, если Вы хотите позволить Вашему методу быть переопределенным подклассом или нет.

4
ответ дан 31 October 2019 в 13:23

необходимо определить метод в классе

 class MyClass 
 {
       class func myString() -> String
       {
           return "Welcome"
       }
}

Теперь, можно получить доступ к нему при помощи Имени класса, например:

   MyClass.myString()

это закончится как "Приветствие".

4
ответ дан 31 October 2019 в 13:23

Другие вопросы по тегам:

Похожие вопросы: