我想知道"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
aya*_*aio 14
是的有效:
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"和/或"willSet"+"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生成的变量.修改数组时,都会调用"willSet"和"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
| 归档时间: | 
 | 
| 查看次数: | 4153 次 | 
| 最近记录: |