
今回はwillSet・didSetの説明をしていきます。
プロパティの値が変わった時に何らかの処理をしたい時に使う事ができるのがwillSet・didSetです!
早速例を見てみましょう!
例を見ていく前にwillSetとdidSetの説明を簡単にしておきます。
willSet 値が変わる前の処理を書く
didSet 値が変わった後の処理を書く
ここで言う値とはプロパティの事です!
下記コード見てみましょう!
class Staff {
let name: String //バイトの名前
var salaryHour: Int { //時給
willSet {
print(salaryHour)// 結果 1250
}
didSet {
print(salaryHour)// 結果 1500
}
}
var worked: Int //働いた時間
init(_ name: String, _ salaryHour: Int, _ worked: Int) {
self.name = name
self.salaryHour = salaryHour
self.worked = worked
}
}
let mayugezio = Staff("まゆげじお", 1250, 8)//インスタンス生成
mayugezio.salaryHour = 1500
今回は時給が変わった時に何らかの処理をしようと思います。
時給のデータを持ってるプロパティは「salaryHourプロパティ」なので、そこに処理を書いていきます。
上記コードだと3行目〜10行目です。
まず19行目と20行目を見てください。
19行目でインスタンスを作ってデータを渡していますね。
20行目で「salaryHourプロパティ」の値を1500に変更しているのがわかると思います。
以上の事を踏まえて、
4行目〜9行目のwillSetとdidSetの中のprint(salaryHour)の違いに注目して下さい。
willSetの方ではprint(salaryHour)の結果が1250
didSetの方ではprint(salaryHour)の結果が1500
になっていますね。
最初の方の説明で、
willSet 値が変わる前の処理を書く
didSet 値が変わった後の処理を書く
と説明しましたが、「salaryHourプロパティ」の値がwillSetとdidSetでは違うと言うのを覚えておくと理解しやすいと思います。
今回は時給が変わった時に、時給が何円から、何円に変わったかと言う処理と、増減の値を出力できるようにします。
では下記コードを見て下さい。
class Staff {
let name: String //バイトの名前
var salaryHour: Int { //時給
willSet {
print("\(salaryHour) -> \(newValue)") // 結果 1250 -> 1500
}
didSet {
print("\(salaryHour - oldValue)円UP!") // 結果 250円UP!
}
}
var worked: Int //働いた時間
init(_ name: String, _ salaryHour: Int, _ worked: Int) {
self.name = name
self.salaryHour = salaryHour
self.worked = worked
}
}
let mayugezio = Staff("まゆげじお", 1250, 8)//インスタンス生成
mayugezio.salaryHour = 1500
では値が変わる前の処理を書くwillSetから見ていきますね。
willSetの中でプロパティの値を変更した後の値はnewValueで取得する事ができます。
willSetではプロパティの値が変化する前の値にるので、print()の中のsalaryHourは1250となってnewValueは1500となります。
次はdidSetです。
didSetの中では変更前の値を取得したい場合oldValueで取得する事ができるので、oldValueは1250でsalaryHourは1500となります。
このようwillSetとdidSetを使うとプロパティが変化した時に何かしらの処理をする事ができると言うのを覚えておきましょう!!
ありがとうございました。
コメントを残す