gpt4 book ai didi

ios - 为什么在设置某个属性的属性时会调用 'didset'?

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

在此代码中,当文本更改时,将调用 titleEditingChanged(如预期的那样)。但是当它执行行时

investment?.title = sender.text!

它调用 Investmentdidset{}。为什么?

class InvestmentCell: UITableViewCell {

var investment: Investment? {
didSet {
// setup UI elements from class properties
textField.text = investment?.title
valueField.text = investment?.value?.description
}
}

@IBAction func titleEditingChanged(sender: UITextField) {
investment?.title = sender.text!
}

@IBOutlet weak var textField: UITextField!
@IBOutlet weak var valueField: UITextField!
}

最佳答案

调用它是因为 Investment 可能是一个结构,而不是一个类。在 Swift 中,结构是值类型,而不是作为类的引用类型。因此,结构不是“就地可变”的。

这意味着每当您更改结构属性时,都会分配一个新的结构对象来替换当前对象,当前对象数据将复制到新对象,但更改的属性将包含新值集。

请记住,无论何时使用 let 命令初始化结构对象(对于类,您都可以这样做),编译器不允许您更改结构属性。

这解释了为什么每当您更改结构属性时都会调用观察者。一旦分配了一个新的结构对象来替换当前的结构对象,它现在将被存储在另一个内存块中,因此它的值将被更改并且 didSet 观察者将被调用。

PS:如果您将 Investment 定义为类而不是结构,则不会发生这种情况。

关于ios - 为什么在设置某个属性的属性时会调用 'didset'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35871312/

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