SwiftUIにおけるdidSetを使用したプロパティの値をチェックする方法

この記事は約4分で読めます。
iOS17.0以上
XCode(当サイトの環境)15.0.1

SwiftUIにおいてプロパティの値をチェックする際には、いくつか方法があります。ここではdidSetを使用した方法を紹介します。
プロパティが変更されたときにその変更を監視し、必要に応じて特定のアクションを実行することができます。

didSetの基本的な使い方

例えば、以下のようにdidSetを使用してプロパティの値を監視することができます。

import SwiftUI

struct didsetSmpView: View {
    @State private var counter = 0 {
         didSet {
             if counter < 0 {
                 counter = oldValue // プロパティの値が0未満にならないように制御
                 print("oldValue set") // ログ出力
             }
         }
     }

     var body: some View {
         VStack {
             Text("Counter: \(counter)")

             Button("Increment") {
                 counter += 1 // ボタンがタップされたらcountを増やす
             }

             Button("Decrement") {
                 counter -= 1 // ボタンがタップされたらcountを減らす
             }
         }
     }
}

didSetは、@Stateなどのプロパティラッパーと一緒に使用されることが多いです。プロパティの値が変更されたとき、didSetブロック内のコードが実行されます。この例では、countプロパティの値が変更された後に、値が0未満にならないように制御しています。

注意点と使いどころ

  • didSetはプロパティの値がコードによって変更された場合にのみトリガーされます。イニシャライザ内で初期化されたときにはトリガーされません。
  • UIの更新は@State@Bindingの変更によって行われるため、didSet内でUIを変更することは推奨されません。

実際の使用例

  • プロパティの変更時にログを出力する。
  • 特定の値の範囲外に変更されないように制御する。
  • プロパティの変更に応じて非同期処理をトリガーする。

didSetはプロパティの監視と制御に役立ちます。プロパティの変更に応じて特定の処理を行いたい場合に、didSetを活用することができます。


このように、didSetを使用してプロパティの変更を監視し、特定の処理を実行する方法があります。特に制約や値の制御に役立ちますが、UIの更新には@State@Bindingを使用することをお勧めします。

参考:onChangeとdidSetの使い分け

onChangedidSetは、SwiftUIでプロパティの変更を監視するための機能ですが、それぞれ異なるコンテキストで使われます。

onChange

  • SwiftUIでの使用: View内のプロパティの変更を監視する際に使用されます。
  • : ユーザーがテキストフィールド内のテキストを変更したときに、その変更をキャッチしてアクションをトリガーする場合に使用されます。
TextField("Enter text", text: $text)
    .onChange(of: text) { newValue in
        // textプロパティが変更されたときの処理
    }

didSet

  • Swift言語全般での使用: Swiftのプロパティに直接適用されるプロパティ監視子です。
  • : SwiftUIの@State@ObservedObjectのプロパティ内で値の変更を監視し、制御や特定の処理を行う場合に使用されます。
@State private var count = 0 {
    didSet {
        if count < 0 {
            count = 0
        }
    }
}

使い分け

  • onChange: SwiftUIのビュー内で、他のプロパティの変更を監視するために使用されます。特にUIの更新など、Viewの特定の部分に関連する処理を行う場合に便利です。
  • didSet: Swift言語でプロパティの変更を監視し、特定の条件下での制御や、値の変更に応じた処理を行うために使用されます。SwiftUIのビューの外でプロパティの変更を監視することが主な目的です。

両方とも、プロパティの変更を監視し、それに応じたアクションをトリガーするための機能ですが、onChangeは主にView内で、didSetはSwift言語全般で使用される点が異なります。

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