SwiftUIのonChangeモディファイアは、指定されたプロパティの値が変わるたびにクロージャを実行する便利なツールです。
onChangeのoldValueやnewValueのパラメータを使用するとプロパティの更新によってクロージャが実行されるだけでなく、プロパティの値が変更される前の前回値を使用することも可能です。
以下は、oldValueとnewValueの使い方を具体的に説明する例です。
パラメータ
その他のパラメータは以下のページを参照してください
サンプルコード
以下の例では、TextFieldに値が入力されると、onChangeモディファイアが呼び出されます。
入力するたびにテキストの値が更新されます。
前回値と変更後の値の比較チェックを行い、前回値と変更後の値の両方をコンソールに出力します。
import SwiftUI
struct OnChangeSmp: View {
@State private var text = ""
var body: some View {
VStack {
TextField("Enter text", text: $text)
.padding()
.textFieldStyle(RoundedBorderTextFieldStyle())
Text("Current text: \(text)")
}
.onChange(of: text, initial: false) { oldVal, newVal in
if oldVal != newVal {
print("前回値: \(oldVal)")
print("変更後: \(newVal)")
}
}
}
}サンプルコードの動作



まとめ
本記事ではonChangeのoldValueとnewValueのパラメータを紹介しました。
これらを使用すると、onChangeを使用する際に前回の値を使用することができるようになるため、プログラム制御の幅が広がるのではないでしょうか。


