Ответ 1
Да, вы можете создавать такие функции класса, как это:
class func someTypeMethod() {
//body
}
Хотя в 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?
Да, вы можете создавать такие функции класса, как это:
class func someTypeMethod() {
//body
}
Хотя в Swift они называются методами типа.
Вы можете определить методы типа внутри вашего класса:
class Foo {
class func Bar() -> String {
return "Bar"
}
}
Затем получите доступ к ним из имени класса, i.e:
Foo.Bar()
В Swift 2.0 вы можете использовать ключевое слово static
, которое предотвратит переопределение подкласса. class
разрешит переопределение подклассов.
ОБНОВЛЕНО: @Logan
С Xcode 6 beta 5 вы должны использовать ключевое слово static
для structs и ключевое слово class
для классов:
class Foo {
class func Bar() -> String {
return "Bar"
}
}
struct Foo2 {
static func Bar2() -> String {
return "Bar2"
}
}
Из официального документа Swift 2.1 Doc:
Вы указываете методы типа, записывая статическое ключевое слово перед ключевыми словами func методов. Классы также могут использовать ключевое слово класса, чтобы позволить подклассам переопределять реализацию этого класса суперклассами.
В структуре вы должны использовать static
для определения метода типа. Для классов вы можете использовать ключевое слово static
или class
, в зависимости от того, хотите ли вы запретить ваш метод переопределять подкласс или нет.
вам нужно определить метод в своем классе
class MyClass
{
class func MyString() -> String
{
return "Welcome"
}
}
Теперь вы можете получить к нему доступ, используя имя класса, например:
MyClass.MyString()
это приведет к "Добро пожаловать".