究竟是什麼意思一個函數被這樣定義:斯威夫特 - 類和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) - >語言指南 - >方法 - >類型方法。 –