在回答How do I know if a value of an element inside an array was changed?的問題時受到啓發,答案是使用屬性觀察器檢查數組是否已被修改。如何使用屬性觀察器觀察具有Swift集合類型的特定元素?
但是,如何確定屬性觀察器中集合類型的更新元素是什麼?例如:
class MyClass {
var strings: [String] = ["hello", "world", "!"] {
didSet(modifiedStrings) {
print("strings array has been modified!!:")
print(modifiedStrings)
}
}
}
let myClass = MyClass()
myClass.strings.append("a string")
myClass.strings[0] = "Hello"
myClass.strings.removeLast()
注意,didSet
代碼已經呼籲各添加,更新或刪除操作的,但我怎麼能確切地知道什麼是影響的因素?是否有一種方法可以通過將strings
數組作爲屬性觀察者來實現此目的?
我在Swift中詢問所有的集合類型,因爲我認爲它應該是所有這些類型的相同行爲,它是關於觀察的。
感謝。
非常好的答案。你在印刷結束時忘了「)」。 + 1 – Rob
與'didSet'中的'oldValue'比較也可以。 –
謝謝你的回答。這聽起來合乎邏輯,我只是添加了一個基於你的答案,展示瞭如何處理數組,字典和集合。對於數組有一個特殊情況(因爲它是唯一排序的)我無法實現(因爲您正在將其更改爲設置 - 未檢測到相減時 - 檢查相減時),這是知道修改過的元素的索引,你有什麼想法,我該怎麼做?順便說一句,我會等待檢查是否有任何新的答案將被接受之前接受你的答案:) –