2015-07-22 92 views
0

爲什麼不能在其實例方法中修改值類型的屬性?需要對值類型方法進行說明

我已經閱讀了Apple的Swift文檔,它沒有提供關於WHY的確切解釋。是的,我知道值類型在傳遞時會被複制,但這與方法無法修改實例屬性有什麼關係。但是,這些屬性可以從結構的外部修改。

另外,我在這裏發現了一個或兩個類似於這個的帖子。不幸的是,這些答案仍然不明確。

回答

2

如果你想修改一個結構的實例,你必須在函數定義前面使用mutating關鍵字。

struct Point { 
var x = 0.0, y = 0.0 
mutating func moveByX(deltaX: Double, y deltaY: Double) { 
    x += deltaX 
    y += deltaY 
} 

}

+0

LOL。我知道如何使用* mutating *關鍵字。它看起來像所有人都知道如何使用它,但沒有人可以解釋爲什麼你需要使用* mutating *。我知道Apple說這是因爲它們是*價值類型*,但這並不能說明問題。 –

+1

考慮一下「價值」是什麼。例如,取數字2的值。如何改變數字2的值?與String相同,「hello」與「hallo」不同 - 它具有不同的值。不變性是一件好事™,因爲許多原因,並且具有價值類型默認情況下不可改變Just Sense™。 – cjwirth

+0

@cjwirth ahhh。我懂了。謝謝你的澄清。現在我似乎明白了。 :) –