SwiftUIで親Viewから子Viewにインスタンスを渡す時の@State @Binding @ObservedObjectの組み合わせ

SwiftUIで親Viewから子Viewにインスタンスを渡す時の@State @Binding @ObservedObjectの組み合わせで色々と挙動が変わってしまうようなので調べることにしました。

検証

インスタンスを生成し

  • 生成View
  • 受け取りView

の間で受け渡し、その挙動を調べます。
また、インスタンスが  class による違いも調べます。

結果

生成受け取りインスタンス結果$挙動/原因
@State@BindingstructOKいる
@State@Bindingclassエラーは出ずいる値が反応しない
@State@ObservedObjectstructエラーstructに@ObservedObjectがつけられない
@State@ObservedObjectclassエラーは出ずいらない生成Viewでは反応しない/受け取りVIewは反応する
@ObservedObject@Bindingstructエラーstructに@ObservedObjectがつけられない
@ObservedObject@Bindingclassエラー渡すところでエラー/何か裏技があるかも
@ObservedObject@ObservedObjectstructエラーstructに@ObservedObjectがつけられない
@ObservedObject@ObservedObjectclassOKいらない
なし@Bindingstructエラー渡すところでエラー
なし@Bindingclassエラー渡すところでエラー/何か裏技があるかも
なし@ObservedObjectstructエラーstructに@ObservedObjectがつけられない
なし@ObservedObjectclassエラーは出ずいらない生成Viewでは反応しない/受け取りVIewは反応する

結論

基本的に
structなら@Stateと@Binding
classなら@ObservedObjectと@ObservedObject
でいいみたいです。