変数やクラスのプロパティの値の変更前、変更後に処理を実施できる
willSet:変更前に実施する処理を記載
didSet:変更後に実施する処理を記載(こちらでは変更後の値を書き換えることもできるらしい)
サンプル
変数
import Foundation println("Hello, World!") println("") var foo: String = "zzzz" var hoge: String = "aaaa" { willSet{ println("hoge: willSet hoge = " + hoge + " foo = " + foo) foo = "1111" } didSet{ println("hoge: didSet hoge = " + hoge + " foo = " + foo) foo = "2222" } } hoge = "bbbb" println("") hoge = "cccc" println("")
↓
Hello, World! hoge: willSet hoge = aaaa foo = zzzz hoge: didSet hoge = bbbb foo = 1111 hoge: willSet hoge = bbbb foo = 2222 hoge: didSet hoge = cccc foo = 1111 Program ended with exit code: 0
※処理内部で他の変数も宣言していることでアクセスできる(そりゃそうだ)
クラス内
import Foundation println("Hello, World!") println("") class Hoge{ var name: String = ""{ willSet{ println("name: willSet name = " + name) } didSet{ println("name: didSet name = " + name) } } } var a = Hoge() a.name = "aaa" println("") a.name = "bbb" println("")
↓
Hello, World! name: willSet name = name: didSet name = aaa name: willSet name = aaa name: didSet name = bbb Program ended with exit code: 0
まあ、こんな感じです
所感
現時点ではまだ、しっくりこない感じ
変更時にログを吐いたりするくらいかな〜と考えています。
変数の宣言と定義を別に用意できたりしないかと考えていましたがまあ大丈夫かな?