@Binding, @Published, @ObservedObject, @StateObject, @EnvironmentObject
変数のバインディング、オブジェクトの共有を行う
### 変数を別のビューの変数と紐づけて使う
– 紐付けて使う変数を @Binding で宣言する
struct ContentView: View {
@State var isChecked_person1: Bool = false
var body: some View {
HStack {
Text("担当者1のチェック")
PersonCheckMark(isChecked: $isChecked_person1)
}
}
}
struct PersonCheckMark: View {
@Binding var isChecked: Bool
var body: some View {
Button(action: {
isChecked.toggle()
}) {
Image(systemName: isChecked ? "person.fill.checkmark" : "person")
.foregroundColor(isChecked ? .blue : .gray)
.scaleEffect(2.0)
.frame(width: 40, height: 40)
}
}
}
### チェック担当者を2人に増やす
struct ContentView: View {
@State var isChecked_person1: Bool = false
@State var isChecked_person2: Bool = false
var body: some View {
VStack {
HStack {
Text("担当者1のチェック")
PersonCheckMark(isChecked: $isChecked_person1)
}
HStack {
Text("担当者2のチェック")
PersonCheckMark(isChecked: $isChecked_person2)
}
Group {
if isChecked_person1 && isChecked_person2 {
Text("全員チェック済み").foregroundColor(.blue)
} else {
Text("チェック待ち").foregroundColor(.red)
}
}
.font(.largeTitle)
.padding(.top)
}
}
}

ほう、