2015-02-11 95 views
11

我完全不知道這是否可能,但它可以使我免於很多壓力和糟糕的代碼。是否有可能監視一個數組何時更新?例如,方法A將數組a=[1,2,3]更改爲a=[1,2,3,4],是否有可能在更新a時觸發某種代理?監視對數組對象的更改

+0

爲什麼不執行自己的協議觀察到,使陣列有問題符合? – 2015-02-11 01:14:38

+0

或者製作一個包裝器對象,在更新數組時,調用didChangeArray()或翻轉可以檢查的公共布爾值。 – 2015-02-11 01:16:46

+0

這是在這裏睡覺的時候了。我明天會提供它(除非有人提出了一個聰明的想法) – 2015-02-11 01:20:32

回答

20

如果您的數組是您的類中的屬性,則可以使用屬性觀察器。 willSet在更改之前調用,didSet在之後調用。這很容易。

var myArray:[Int] = [1, 3, 4] { 
    didSet { 
     println("arrayChanged") 
    } 
} 

這將打印數組改變,如果我一個int,刪除和Int,等我通常把它放在同一行,但:

var myArray:[Int] = [1, 3, 4] { didSet { println("arrayChanged") } } 
+0

正是我在找的東西,謝謝。 – 2015-02-11 01:44:07

+0

謝謝,這是非常有幫助的 – 2017-03-10 03:26:39

+6

有什麼辦法來監視內部數組的變化?像myArray.append(x)? – 2017-10-06 12:29:41