2015-02-09 78 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