我如何在Swift中声明一个类级别的函数?
我似乎无法在文档中find它,我想知道它是否存在于本地Swift中。 例如,我可以在NSTimer
上调用一个类级别的函数,如下所示:
NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: "someSelector:", userInfo: "someData", repeats: true)
但我似乎无法find一种方法来执行我的自定义对象,以便我可以这样调用它:
MyCustomObject.someClassLevelFunction("someArg")
现在,我知道我们可以混合使用Objective-C w / Swift,并且NSTimer
类方法可能是互操作性的一个补充。
题
-
Swift中存在类级别的函数吗?
-
如果是,我如何在Swift中定义一个类级别的函数?
是的,你可以像这样创build类的function:
class func someTypeMethod() { //body }
虽然在Swift中,它们被称为types方法。
你可以在你的类中定义Type方法:
class Foo { class func Bar() -> String { return "Bar" } }
然后从类Name中访问它们,即:
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" } }
从官方的Swift 2.1 Doc :
您可以通过在方法的func关键字之前写入static关键字来指示types方法。 类也可以使用class关键字来允许子类重写该方法的超类实现。
在一个结构中,你必须使用static
来定义一个Type方法。 对于类,您可以使用static
或class
关键字,具体取决于是否允许您的方法被子类重写。
你需要在你的类中定义方法
class MyClass { class func MyString() -> String { return "Welcome" } }
现在你可以使用类名来访问它,例如:
MyClass.MyString()
这将作为“欢迎”。