SwiftUIで親Viewから子Viewにインスタンスを渡す時の@State @Binding @ObservedObjectの組み合わせ
SwiftUIで親Viewから子Viewにインスタンスを渡す時の@State @Binding @ObservedObjectの組み合わせで色々と挙動が変わってしまうようなので調べることにしました。
検証
インスタンスを生成し
- 生成View
- 受け取りView
の間で受け渡し、その挙動を調べます。
また、インスタンスが class による違いも調べます。
結果
| 生成 | 受け取り | インスタンス | 結果 | $ | 挙動/原因 |
|---|---|---|---|---|---|
| @State | @Binding | struct | OK | いる | |
| @State | @Binding | class | エラーは出ず | いる | 値が反応しない |
| @State | @ObservedObject | struct | エラー | structに@ObservedObjectがつけられない | |
| @State | @ObservedObject | class | エラーは出ず | いらない | 生成Viewでは反応しない/受け取りVIewは反応する |
| @ObservedObject | @Binding | struct | エラー | structに@ObservedObjectがつけられない | |
| @ObservedObject | @Binding | class | エラー | 渡すところでエラー/何か裏技があるかも | |
| @ObservedObject | @ObservedObject | struct | エラー | structに@ObservedObjectがつけられない | |
| @ObservedObject | @ObservedObject | class | OK | いらない | |
| なし | @Binding | struct | エラー | 渡すところでエラー | |
| なし | @Binding | class | エラー | 渡すところでエラー/何か裏技があるかも | |
| なし | @ObservedObject | struct | エラー | structに@ObservedObjectがつけられない | |
| なし | @ObservedObject | class | エラーは出ず | いらない | 生成Viewでは反応しない/受け取りVIewは反応する |
結論
基本的に
structなら@Stateと@Binding
classなら@ObservedObjectと@ObservedObject
でいいみたいです。

