didSet、willSet
SwiftのwillSetとdidSetはプロパティオブザーバで、値が変更される「直前」にwillSet(新しい値 newValue を参照可能)、値が変更された「直後」にdidSet(古い値 oldValue を参照可能)が実行され、プロパティの変更を検知して追加の処理を行うための仕組みです。違いはタイミングと参照できる値で、willSetは変更前、didSetは変更後、willSetでnewValue、didSetでoldValueを使います。
willSet (変更前)
用途: 値が変更されることを事前に通知したい場合や、新しい値に基づいて何らかの準備をしたい場合。 willSetを使う
タイミング: プロパティの値が変更される直前に実行されます。
参照できる値: newValueという特別な定数で、これから代入される新しい値にアクセスできます。
|
1 2 3 4 5 6 |
var score: Int = 0 { willSet { print("スコアが変更されます。新しい値: \(newValue)") // newValueで新しい値を確認 } } score = 100 // willSetが実行される |
didSet (変更後)
- タイミング: プロパティの値が変更された直後に実行されます。
- 参照できる値:
oldValueという特別な定数で、変更される前の古い値にアクセスできます。 - 用途: 値が変更された後にUIを更新する、ログを出力する、他のプロパティに影響を与えるなどの処理。
|
1 2 3 4 5 6 |
var score: Int = 0 { didSet { print("スコアが変更されました。古い値: \(oldValue)") // oldValueで古い値を確認 } } score = 100 // didSetが実行される |
まとめ
| 特徴 | willSet | didSet |
|---|---|---|
| 実行タイミング | 値が変更される直前 | 値が変更された直後 |
| 参照できる値 | newValue (これから代入される値) | oldValue (変更前の値) |
| 主な用途 | 変更前の準備、通知 | 変更後の処理、UI更新 |
コメント