我注意到Swift
protocols
中的一些函數有static
關鍵字。但是,實現此功能時,必須刪除static
關鍵字才能使編譯器高興。Swift 3協議中的靜態關鍵字
public static func <(lhs: Self, rhs: Self) -> Bool
static
在上下文中的含義是什麼?它的目的是什麼?
我注意到Swift
protocols
中的一些函數有static
關鍵字。但是,實現此功能時,必須刪除static
關鍵字才能使編譯器高興。Swift 3協議中的靜態關鍵字
public static func <(lhs: Self, rhs: Self) -> Bool
static
在上下文中的含義是什麼?它的目的是什麼?
從Xcode的8個β4發行說明:
操作員可以類型或其擴展中定義。對於 例如:
struct Foo: Equatable { let value: Int static func ==(lhs: Foo, rhs: Foo) -> Bool { return lhs.value == rhs.value } }
這樣的運營商必須聲明爲
static
(或者,在一個類中,class final
),並且具有相同的簽名作爲其全球同行 。作爲這種變化的一部分,運營商需求申報 的協議也必須明確聲明static
:protocol Equatable { static func ==(lhs: Self, rhs: Self) -> Bool }
靜態屬性和方法
斯威夫特可以創建屬於一個類型的屬性和方法而不是類型的實例。這對於通過存儲共享數據有意義地組織數據很有幫助。
Swift調用這些共享屬性的「靜態屬性」,並且只是使用static關鍵字創建一個。完成後,您可以使用該類型的全名訪問該屬性。這裏有一個簡單的例子:
struct TaylorFan {
static var favoriteSong = "Shake it Off"
var name: String
var age: Int
}
let fan = TaylorFan(name: "James", age: 25)
print(TaylorFan.favoriteSong)
所以,泰勒斯威夫特球迷有屬於自己的姓名和年齡,但它們都具有相同的最喜歡的歌曲。
因爲靜態方法屬於類而不屬於類的實例,所以不能用它來訪問類中的任何非靜態屬性。