如何在Swift中声明类级函数?

时间:2014-06-03 05:51:58

标签: swift

我似乎无法在文档中找到它,我想知道它是否存在于原生Swift中。例如,我可以在NSTimer上调用类级函数,如下所示:

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

但我似乎找不到使用自定义对象的方法,以便我可以这样称呼它:

MyCustomObject.someClassLevelFunction("someArg")

现在,我知道我们可以将Objective-C与Swift混合使用,NSTimer类方法可能是该互操作性的残余。

问题

  1. Swift中是否存在类级函数?

  2. 如果是,我如何在Swift中定义类级别函数?

5 个答案:

答案 0 :(得分:110)

是的,你可以像这样创建类函数:

class func someTypeMethod() {
    //body
}

虽然在Swift中,它们被称为Type方法。

答案 1 :(得分:38)

您可以使用以下内容在类中定义Type方法:

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

然后从类Name中访问它们,即:

Foo.Bar()

在Swift 2.0中,您可以使用static关键字来阻止子类覆盖该方法。 class将允许子类覆盖。

答案 2 :(得分:14)

更新:感谢@Logan

使用Xcode 6 beta 5,您应该为结构使用static关键字,为类使用class关键字:

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

struct Foo2 {
    static func Bar2() -> String {
        return "Bar2"
    }
}

答案 3 :(得分:4)

您需要在班级中定义方法

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

现在您可以使用类名来访问它,例如:

   MyClass.myString()

这将导致"欢迎"。

答案 4 :(得分:4)

来自official Swift 2.1 Doc

  

通过在方法的func关键字之前写入static关键字来指示类型方法。类也可以使用class关键字来允许子类覆盖超类的该方法的实现。

在结构中,必须使用static来定义Type方法。对于类,您可以使用staticclass关键字,具体取决于您是否允许您的方法被子类覆盖。