gpt4 book ai didi

swift - "didSet"是否适用于数组中的元组?

转载 作者:IT王子 更新时间:2023-10-29 05:42:19 24 4
gpt4 key购买 nike

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

最佳答案

是的,它有效:

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

newValueoldValue 都是 Swift 生成的变量。修改数组时会调用“willSet”和“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

关于swift - "didSet"是否适用于数组中的元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32312849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com