2015-02-09 79 views

回答

1

您無法直接訪問已更改元素的索引,部分原因是因爲在特定索引處設置新值只會觸發didSet處理程序的一個操作。任何變異方法將導致一個電話:

bar = ["Hello", "world"]      // Set to [Hello, world] 
bar[0] = "Howdy"        // Set to [Howdy, world] 
bar.insert("cruel", atIndex: 1)    // Set to [Howdy, cruel, world] 
bar.replaceRange(0..<1, with: ["So", "long"]) // Set to [So, long, cruel, world] 
bar.removeRange(2..<3)       // Set to [So, long, world] 
bar.append("!")        // Set to [So, long, world, !] 
bar.removeAll()        // Set to [] 

裏面的didSet處理程序,你必須訪問一個名爲oldValue一個特殊的變量,它包含了觀測變量的前值。如果您需要更多的你需要實現一個struct或使用的Array用於存儲,但提供自己的真實訪問方法class

+0

好吧......這是很有意義的。所以,也許問題實際上是:如果你要重寫數組的subscript()方法,那會是什麼樣子?我迷失在這個時候的語法...... – 2015-02-09 14:52:06

+0

問題在於'Array'是一個結構體,所以你不能繼承和重寫下標。 (這是Objective-C stalwarts開始咬牙切齒的部分)。您需要創建一個全新的*類型,並將一個'Array'作爲一個屬性,並在其下標中獲取/設置所需的邏輯方法。 – 2015-02-09 14:55:38

+0

你的用例是什麼?這是一個你將要完全創建和使用的數組,還是你想從其他地方監視數組中的更改? – 2015-02-09 14:56:13