SwiftUI - 所有变量切换而不是只有一个

SwiftUI - All variables toggle instead of juts one

我有 5 个状态变量和 5 个按钮。 我要他们排成一排,一个一个切换

变量

@State private var canEat: Bool = false
@State private var canDrink: Bool = false
@State private var canSleep: Bool = false
@State private var canDance: Bool = false
@State private var canEntertain: Bool = false

按钮

Section(header: Text("Action".uppercased())) {
                HStack {
                    Button(action: {self.canEat.toggle()}){Image("ToEat").foregroundColor(self.canEat ? .green : .red)}
                    Spacer()
                    Button(action: {self.canDrink.toggle()}){Image("ToDrink").foregroundColor(self.canDrink ? .green : .red)}
                    Spacer()
                    Button(action: {self.canSleep.toggle()}){Image("ToSleep").foregroundColor(self.canSleep ? .green : .red)}
                    Spacer()
                    Button(action: {self.canDance.toggle()}){Image("ToDance").foregroundColor(self.canDance ? .green : .red)}
                    Spacer()
                    Button(action: {self.canEntertain.toggle()}){Image("ToEntertain").foregroundColor(self.canEntertain ? .green : .red)}
                    Spacer()
                }
            }

问题是当我切换一个时,它们都一起切换...

如果我在下面创建另一个 VStack 并添加一个 acxtual 切换

    VStack{
        Toggle(isOn: $canEat) {
            Image("ToEat")
        }
    }

那么我只能切换一个。

为什么?我该如何解决这个问题?

谢谢, 尼古拉斯

您可以将 action 移动到 TapGesture

        Form{
        Section(header: Text("Action".uppercased())) {
            HStack {
                Button(action: {}){Image("image").foregroundColor(self.canEat ? .green : .red)}.onTapGesture {
                    self.canEat.toggle()
                }
                Spacer()
                Button(action: {}){Image("image").foregroundColor(self.canDrink ? .green : .red)}.onTapGesture {
                    self.canDrink.toggle()
                }
                Spacer()
                Button(action: {}){Image("image").foregroundColor(self.canSleep ? .green : .red)}.onTapGesture {
                    self.canSleep.toggle()
                }
                Spacer()
                Button(action: {}){Image("image").foregroundColor(self.canDance ? .green : .red)}.onTapGesture {
                    self.canDance.toggle()
                }
                Spacer()
                Button(action: {}){Image("image").foregroundColor(self.canEntertain ? .green : .red)}.onTapGesture {
                    self.canEntertain.toggle()
                }
                Spacer()
            }
        }
}