2016-08-14 47 views
1

我注意到Swiftprotocols中的一些函數有static關鍵字。但是,實現此功能時,必須刪除static關鍵字才能使編譯器高興。Swift 3協議中的靜態關鍵字

public static func <(lhs: Self, rhs: Self) -> Bool 

static在上下文中的含義是什麼?它的目的是什麼?

回答

4

從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 
} 
1

靜態屬性和方法

斯威夫特可以創建屬於一個類型的屬性和方法而不是類型的實例。這對於通過存儲共享數據有意義地組織數據很有幫助。

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) 

所以,泰勒斯威夫特球迷有屬於自己的姓名和年齡,但它們都具有相同的最喜歡的歌曲。

因爲靜態方法屬於類而不屬於類的實例,所以不能用它來訪問類中的任何非靜態屬性。