如何在 swift 中将一组切换设置为互斥

IMK*_*MKt 4 ios swift swiftui

@State private var isOn1 = false
@State private var isOn2 = false

var body: some View {
    ScrollView{
        Toggle("switch1",isOn:$isOn1)
        Toggle("switch2",isOn:$isOn2)
    }
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的。有没有办法让我在激活一个开关时添加一个 if 语句,使所有其他开关都将关闭。或者在激活开关时是否可以更改开关的状态。任何答案都表示感谢,谢谢!

Asp*_*eri 8

这是一些替代方法,它不需要对所有绑定进行相互依赖的硬编码,而是使用布尔值的共享存储:

演示

struct DemoExclusiveToggles: View {
    @State var flags = Array(repeating: false, count: 9)
    var body: some View {
        ScrollView {
            ForEach(flags.indices) { i in
                ToggleItem(storage: self.$flags, tag: i, label: "Switch \(i+1)")
                    .padding(.horizontal)
            }
        }
    }
}

struct ToggleItem: View {
    @Binding var storage: [Bool]
    var tag: Int
    var label: String = ""

    var body: some View {
        let isOn = Binding (get: { self.storage[self.tag] },
            set: { value in
                withAnimation {
                    self.storage = self.storage.enumerated().map { $0.0 == self.tag }
                }
            })
        return Toggle(label, isOn: isOn)
    }
}
Run Code Online (Sandbox Code Playgroud)