究竟是什么意思一个函数被这样定义:斯威夫特 - 类和FUNC关键字
class Foo {
private class func bar() {
//do something cool
}
}
换句话说,什么是这里的秒class
关键字的目的是什么?
使用Swift 2.1。
究竟是什么意思一个函数被这样定义:斯威夫特 - 类和FUNC关键字
class Foo {
private class func bar() {
//do something cool
}
}
换句话说,什么是这里的秒class
关键字的目的是什么?
使用Swift 2.1。
class
和static
方法通过类型而不是实例调用。
let x = NSString.pathWithComponents(["/", "usr", "local", "bin", "brew"])
任何类型的可以具有static
方法,可以在类只发生class
方法。子类可以覆盖class
方法,但不能覆盖static
。
class Foo {
class func bar() -> String {
return "foo bar"
}
static func baz() -> String {
return "foo baz"
}
}
class Bar: Foo {
override class func bar() -> String {
return "bar bar"
}
}
它是一个类函数,所以你可以在一个类上调用它,没有类实例。它与java/C++中的静态一样
class A {
public class func f() {
print("hey")
}
}
A.f()
它只是在类本身而不是类的一个实例上声明函数。
class Foo {
private class func omg() -> String {
return "OMG"
}
}
Foo.omg() => "OMG"
调用
let f = Foo()
f.omg() => Static member 'omg' cannot be used on instance of type 'Foo'
所以,你可以看到其中的差别
class关键字的目的,在函数签名声明该功能必须在类的类型本身被调用。也就是说,您不需要实例化类的类型的对象,实际上不能在类型的实例上调用此函数。
Cocoa Touch中有这样的例子。以UIImage(名为:String)。 UIImage类为您提供了按照名称从包中获取图像的功能。但是没有UIImage的实例可以调用这个方法(事实上,因为这个函数调用是你用来获取图像的东西,所以不会有这个函数调用)。
[ “夫特语言参考”](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html) - >语言指南 - >方法 - >类型方法。 –