Я, может казаться, не нахожу его в документах, и я задаюсь вопросом, существует ли это в собственном компоненте 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
}
, Хотя в Быстром, их называют методами Типа.
Можно определить методы Типа в классе с:
class Foo {
class func Bar() -> String {
return "Bar"
}
}
Затем получают доступ к ним от имени класса, т.е.:
Foo.Bar()
В Быстрых 2.0 можно использовать static
ключевое слово, которое будет препятствовать тому, чтобы подклассы переопределили метод. class
позволит подклассам переопределять.
ОБНОВЛЕННЫЙ: Благодаря @Logan
С бетой 5 Xcode 6 необходимо использовать static
ключевое слово для структур и class
ключевое слово для классов:
class Foo {
class func Bar() -> String {
return "Bar"
}
}
struct Foo2 {
static func Bar2() -> String {
return "Bar2"
}
}
От официальный документ Swift 2.1:
Вы указываете на методы типа путем записи статического ключевого слова перед method’s func ключевое слово. Классы могут также использовать ключевое слово класса, чтобы позволить подклассам переопределять superclass’s реализацию того метода.
В структуре, необходимо использовать static
для определения метода Типа. Для классов можно использовать или static
или class
ключевое слово, в зависимости от того, если Вы хотите позволить Вашему методу быть переопределенным подклассом или нет.
необходимо определить метод в классе
class MyClass
{
class func myString() -> String
{
return "Welcome"
}
}
Теперь, можно получить доступ к нему при помощи Имени класса, например:
MyClass.myString()
это закончится как "Приветствие".