Swiftでclassやstructを宣言してメンバー変数を定義したときに、その値が変更されたときに何か処理したいことあります。その方法を説明します。
デバッグの時にも便利です。
デバッグの時にも便利です。
Sponsor Link
プロパティ監視
Swift 言語そのものが、プロパティ変更を監視するための仕組みを提供しています。
Swiftが用意している仕組み
- willSet
- 変更前に、ブロックを実行することができます
- didSet
- 変更後に、ブロックを実行することができます
SwiftUIであれば、@State等の仕組みで、定義された変数の変更からビュー再構築ができますので、これらが使われるのは、変数の変更に合わせて特定の処理を行わせたい場合です。
willSet/didSet の使い方
以下は、alarmOnという変数が変更されると、updateAlarmTimerという関数が呼ばれます。
didSet example code
1 2 3 4 5 6 7 |
var alarmOn:Bool = false { didSet(newValue) { updateAlarmTimer() } } |
引数に、新しい値(newValue)が渡されるので、必要であれば参照できます。
@Stateとの組み合わせもOK
SwiftUIの仕組みを使いたいのであれば、@State等と組み合わせることもできます。
1 2 3 4 5 |
@State var alarmOn:Bool = false { didSet(newValue) { updateAlarmTimer() } } |
まとめ
ある変数を監視して、何らかの処理を行いたいのであれば、willSet/didSetを使えばできます。
注意
その処理が、GUIの更新であるならば、SwiftUIの仕組みを使用して更新する方が良いので、@Stateや@Publisedを使いましょう。Sponsor Link