Avatar
Avatar
xsuiyoku
参照を渡すような感じですか?
はい、 Binding はそんな感じです。 Binding 自体は全く特殊な型ではなく、 @Binding なプロパティが変更されても body を再実行するような機能も持ちません。ただ getset を持つだけです。
3:08 PM
@Binding なプロパティが変更されたときにそのViewの body が再実行されるのは、 Binding を渡した側のViewで body が再実行され、それに伴って渡された側の View も更新されるからです。
3:13 PM
struct FooView: View { @State var user: User var body: some View { Checkbox(isOn: $user.isPublic) } } struct Checkbox: View { @Binding var isOn: Bool var body: some View { Button { isOn.toggle() } label: { Image(isOn ? "Checkbox-On" : "Checkbox-Off") } } } とした場合、 user.isPublic が更新されるとそれを @Binding で保持する Checkboxbody が再実行されるのではなく、 user@State で保持する FooViewbody が再実行されます。その結果として、 Checkbox(isOn: $user.isPublic) が新しい isPublic に対して実行され、 Checkbox が更新されます。