我想知道“didSet”是否适用于数组中的元组。
我正在编写类似下面的代码,我想观察数组中的元组值。可以做那种事吗?
var array :[(foo: Int, bar: Int)] = []]{
didSet{
// println code
}
}
init(){
var tuple = (foo: 0, bar:0)
array = Array(count: 16, repeatedValue: tuple)
}
// change the value somewhere in the code
// and for example, want to println just only (and when) the value changed
array[3].foo = 100
答案 0 :(得分:12)
是的有效:
var array : [(foo: Int, bar: Int)] = [] {
didSet {
println("~~~~~~")
}
}
let tup = (foo: 0, bar: 42)
array.append(tup)
println(array)
array[0].foo = 33
println(array)
每次修改数组时都会执行 didSet
,如预期的那样:
~~~~~~
[(0,42)]
~~~~~~
[(33,42)]
如果您想知道更改的值,请使用" didSet" +" oldValue"和/或"将设置" +" newValue":
var array : [(foo: Int, bar: Int)] = [] {
willSet {
println(newValue)
}
didSet {
println(oldValue)
}
}
let tup = (foo: 0, bar: 42)
array.append(tup)
array[0].foo = 33
[(0,42)]
[]
[(33,42)]
[(0,42)]
newValue
和oldValue
都是Swift生成的变量。两个"将设置"和#34; didSet"在修改数组时调用。
<强>更新强>
您可以访问newValue
和oldValue
后面的实际对象。例如:
var array : [(foo: Int, bar: Int)] = [] {
willSet {
println(newValue[0].foo)
}
didSet {
if oldValue.count > 0 {
println(oldValue[0].foo)
} else {
println(oldValue)
}
}
}
let tup = (foo: 0, bar: 42)
array.append(tup)
array[0].foo = 33