2017-08-17 91 views
0

我有一个数组,具有多个值。我想如果这些值中的一个改变来检测,这样的事情:'didSet'数组内的某些元素 - Swift

var array = 
    [ 
     1, 
     2, 
     3, 
     4 { didSet{ print("Value Changed")}}, 
     5, 
     6 
    ] 

这是可能的,以任何方式?

感谢

回答

3

雨燕3.0

你可以像下面来观察其数组的索引被改变。

var oldArray: [Int] = [] 

var array = [ 1,2,3,4,5,6] { 

    willSet { 
     // Set old array value for compare 
     oldArray = array 
    } 

    didSet { 
     let changedIndex = zip(array, oldArray).map{$0 != $1}.enumerated().filter{$1}.map{$0.0} 
     print("index: \(changedIndex)") 
    } 
} 

// Now change value of index 4 of array 

array[4] = 10 //index: [4] 
+2

'didSet'观察员有一个隐含的'oldValue'变量,就没有必要为您的'oldArray' –

+0

如果我有一个数组:[1,2,[ “A”, “B”,“C “],3]和数组[3] [2] =”e“,你的代码是否会返回[3] [2]。我很确定它会,但只是为了澄清? –