“didSet”是否与数组中的元组一起使用?

时间:2015-08-31 13:48:31

标签: swift

我想知道“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

1 个答案:

答案 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)]

newValueoldValue都是Swift生成的变量。两个"将设置"和#34; didSet"在修改数组时调用。

<强>更新

您可以访问newValueoldValue后面的实际对象。例如:

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