在Swift中使用willSet和didSet的目的是什么?

在Swift中使用willSet和didSet的目的是什么?

Swift有一个非常类似于C#的属性声明语法:

var foo: Int {
    get { return getFoo() }
    set { setFoo(newValue) }}

但是,它也有willSetdidSet行动。这些在分别调用setter之前和之后调用。考虑到你可以在setter中使用相同的代码,它们的目的是什么?


拉丁的传说
浏览 1226回答 3
3回答

茅侃侃

关键在于,有时候,您需要一个具有自动存储和某些行为的属性,例如通知其他对象该属性刚刚更改。当你拥有的是get/时set,你需要另一个字段来保存值。使用willSet和didSet,您可以在修改值时执行操作,而无需其他字段。例如,在该示例中:class Foo {     var myProperty: Int = 0 {         didSet {             print("The value of myProperty changed from \(oldValue) to \(myProperty)")         }     }}myProperty每次修改时都会打印其旧值和新值。只有吸气剂和二传手,我需要这样做:class Foo {     var myPropertyValue: Int = 0     var myProperty: Int {         get { return myPropertyValue }         set {             print("The value of myProperty changed from \(myPropertyValue) to \(newValue)")             myPropertyValue = newValue        }     }}因此willSet,didSet代表了几行的经济,并且在现场列表中的噪音更少。
打开App,查看更多内容
随时随地看视频慕课网APP