web-dev-qa-db-ja.com

Swiftの@Binding変数のdidSet

通常、変数の更新を監視するためにdidSet in Swiftを使用できます。ただし、@Binding変数では機能しませんでした。たとえば、次のコード:

@Binding var text {
   didSet {
       ......
   }
}

しかし、didSetが呼び出されることはありません。ありがとう。

9
Bagusflyer

@BindingdidSetオブザーバーは必要ありません。

didSetが変更されたときに表示用に何か他のものを計算したいのでtextが必要な場合は、それを計算するだけです。たとえば、textの文字数を表示する場合:

struct ContentView: View {
    @Binding var text: String

    var count: Int { text.count }

    var body: some View {
        VStack {
            Text(text)
            Text(“count: \(count)”)
        }
    }
}

データモデルに他の変更を加えたいためにtextを監視する場合、Viewからの変更を監視することは間違っています。 Viewからではなく、モデル内の別の場所、またはコントローラーオブジェクト内の変更を監視する必要があります。 Viewvalueタイプであり、参照タイプではないことに注意してください。 SwiftUIは必要なときにそれを作成し、その複数のコピーを保存するか、まったくコピーを保存しない場合があります。

2
rob mayoff