2016-05-15 77 views
2

這聽起來很蠢,但我想不出爲什麼程序員斯威夫特聲明變量如下:爲什麼我們在Swift變量聲明中使用關鍵字「get」?

class Person: NSObject { 
    var name: String { get } 
} 

爲什麼是「GET」使用關鍵字?爲什麼「設置」錯過?他們不是應該使用如下:

class Person: NSObject { 
    var name: String { 
     get { 
      // getter 
     } 
     set { 
      // setter 
     } 
    } 
} 

我想這是一個垃圾郵件的問題,但我感興趣的理論定義{}獲得

+1

http://stackoverflow.com/questions/24699327/swift-what-are-get-and-set –

+0

謝謝,我知道如何使用** **設置** **弄,** willSet * *,** didSet **,但我很好奇這段代碼:** {get} **。爲什麼它實際上沒有返回任何東西? – Lucifer

+0

你應該在其中添加一個return語句。得到{返回姓名}。我想這個聲明「var name:String {get}」只是顯示一個簡短的代碼片段。 –

回答

3

句子(如var name: String { get })通常用於不在類中的協議。在一個協議中,它意味着實現必須有一個String類型的變量,它應該至少是隻讀的(因此get)。如果大括號位爲{ get set },則該變量將被讀取寫入。

其實按照伯爵茶答案,var name: String { get }不會在類中進行編譯。

+0

太好了,謝謝!當我將一個Obj-C類的接口轉換成Swift時,編輯器生成了這個變量,這個混淆來自助理編輯。現在我明白了。謝謝! – Lucifer

2

第一個代碼示例嚴格地說沒有意義。你不是在一個類中聲明這樣的變量。(你在這樣的協議,做到這一點。)

二是計算特性的一個例子,儘管getter和setter實現丟失。 (這似乎暗示至少我不會反對代碼示例的有效性。)

相關問題