onCangeを使用して前回値と変更後の値を比較する方法

この記事は約3分で読めます。

SwiftUIのonChangeモディファイアは、指定されたプロパティの値が変わるたびにクロージャを実行する便利なツールです。

onChangeoldValuenewValueのパラメータを使用するとプロパティの更新によってクロージャが実行されるだけでなく、プロパティの値が変更される前の前回値を使用することも可能です。

  • iOS:17.0以上
  • XCode(当サイトの環境):15.0.1

以下は、oldValuenewValueの使い方を具体的に説明する例です。

パラメータ

  • oldValue:監視対象のプロパティが更新されonChangeが呼び出された時、更新前の値が格納されている
  • 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を使用する際に前回の値を使用することができるようになるため、プログラム制御の幅が広がるのではないでしょうか。

タイトルとURLをコピーしました