我想澄清一下,如果我正確理解以下概念。計算屬性的好處(僅可獲取的屬性)與存儲的屬性
假設我的目標是將String
"Good morning, Mike"
存儲到變量var sayGoodMorningToUser
中。
的字符串是由兩個變量,即
var greeting = "Good morning, "
var username = "Mike"
的這有什麼區別,如果我使用的存儲性能與計算性能,換句話說:
var sayGoodMorningToUserStored = greeting + username
與
var sayGoodMorningToUserComputed:String {
return greeting + username
}
我在這兩種方法之間唯一的區別是任何人都可以改變sayGoodMorningToUserStored的值可以容易且直接地存儲,例如通過寫
var sayGoodMorningToUserStored = "myNewChangedValue"
而可變sayGoodMorningToUserComputed不能直接修改的,因爲它不能簡單地將其設置爲一個新的字符串值:
var sayGoodMorningToUserComputed = "Hallo" //this would cause an error
否則,我不明白爲什麼人們計算的變量,而不是簡單地寫作
var sayGoodMorningToUserStored = greeting + username.
任何人都可以解釋,如果我理解正確嗎?或者還有計算變量與儲存變量的其他優點?
我想限制我的問題僅限於gettable變量,因爲討論這裏的可設置變量將超出範圍。
計算屬性的用途是您聲明一次,並且當「用戶名」更改時,計算的「問候」屬性將自動更新以反映該屬性。所以如果'用戶名'改變了,你不必記得更新'sayGoodMorningToUserStored'。如果你在你的代碼中的其他地方引用它,它會自動地反映'username'的當前值,而不是'sayGoodMorningToUserStored'第一次聲明時的'username'。 – Rob
我現在能想到的主要區別在於協議和協議擴展。由於協議不能保持狀態,所以計算值最好。 – jonmecer
@Pisan如果您覺得您的問題已得到滿足,請評價爲已接受的問題。 – Alexander