1. ホーム
  2. スイフト

[解決済み】SwiftのwillSetとdidSetの目的は何ですか?

2022-04-01 04:38:59

質問

Swiftは、C#と非常によく似たプロパティ宣言の構文を持っています。

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

しかし、それはまた willSetdidSet アクションを使用します。これらは、それぞれセッターが呼ばれる前と後に呼ばれます。セッターの内部で同じコードを書けばよいことを考えると、これらの目的は何なのでしょうか?

解決方法は?

ポイントは、自動保存機能を持つプロパティが必要な場合があることだと思われる 例えば、プロパティが変更されたことを他のオブジェクトに通知するなどの動作があります。もし get / set の場合、値を保持するために別のフィールドが必要になります。とは willSetdidSet を使えば、別のフィールドを用意しなくても、値が変更されたときにアクションを起こすことができます。例えば、その例では

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
        }
    }
}

だから willSetdidSet は、数行の節約と、フィールドリストのノイズの減少を意味します。