m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

swiftの学習(willSet、didSet)

変数やクラスのプロパティの値の変更前、変更後に処理を実施できる

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

まあ、こんな感じです

所感

現時点ではまだ、しっくりこない感じ
変更時にログを吐いたりするくらいかな〜と考えています。
変数の宣言と定義を別に用意できたりしないかと考えていましたがまあ大丈夫かな?