[英]One instance of a class changing property value but other instance doesn't get updated with the change of property in swift
在這里你可以看到 class SameData 有兩個實例 data1 和 data2。 如果我更改存儲在 class 屬性中的 data2 實例用戶名,它不會在同一 class 的 data1 實例中更新。
在 swift class 中,當一個實例中的屬性更改時,應在所有實例中更新。 但為什么會這樣?
代碼:
class SameData {
var userName = "Anonymous"
}
var data1 = SameData()
var data2 = SameData()
data2.userName = "Not Anonymous"
print(data2.userName)
print(data1.userName)
結果:
"Not Anonymous\n"
"Anonymous\n"
由於這是一個 class 並且一個實例正在更改用戶名,那么 class 的所有實例都應該采用更改,對嗎? 所以,結果應該是這樣的。
預期結果:
"Not Anonymous\n"
"Not Anonymous\n"
在 class 屬性中
這些不是 class 屬性。 這些只是兩個不同實例上的實例屬性。 自然,改變一個不會改變另一個。 這就是實例的全部意義。 它們是單獨的實例。 這些只是具有默認值的實例屬性,類似於編寫:
class SameData {
var userName: String
init() {
self.userName = "Anonymous"
}
}
Class 屬性用class
標記(或類似的static
,大致相當於class final
)
也就是說,將用戶名標記為 class 常量並沒有真正意義。 想必每個用戶都應該有自己的用戶名,而且應該是獨立的。 您應該在 model 中添加更多關於您嘗試的數據類型的詳細信息,以便我們可以就如何處理它提供更具體的建議。
我將解釋為答案,因為我無法將其納入評論。
var data1 = SameData()
中, SameData()
是 object, data1
就像指向 object 的手指。var data2 = SameData()
時:您創建第二個 object,並將手指data2
指向該 object。所以你有 2 個對象,2 個手指分別指向每個 object,object 都不知道另一個的存在。
現在,如果您執行var data2 = data1
,則不會創建新的 object,而是將另一個手指data2
指向您之前創建的相同object。 所以在這里你有 2 個手指指向同一個 object。
因此,在第一種情況下,通過更改data1
,您將更改第一個 object,但第二個 object( data2
指向的)保持不變。
在第二種情況下,通過更改data1
,您正在更改您擁有的唯一 object 。 由於兩個手指都指向同一個 object,他們都看到了變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.