无需绑定的 SwiftUI 拨动开关

SwiftUI Toggle Switch without Binding

这似乎是个奇怪的问题,但我环顾四周,似乎找不到答案。

我想在未绑定到任何变量的视图中创建切换。想象一下可以切换但实际上什么都不做的切换开关列表。

我已经尝试过使用 .constant butt,正如您所期望的那样,这不允许我切换开关。显然将它留空会引发错误。

//Can't be changed
Toggle(isOn: .constant(true)) {
       Text("Checkbox")
}

//Throws an error
Toggle() {
       Text("Checkbox")
}

是否可以在 isOn: 参数中传递任何内容以允许这样做?

编辑:

理论上,我可以在我的视图中只包含一个@State 变量并绑定到切换开关,并且简单地不在我视图中的其他任何地方使用该变量。唯一的问题是,我提前不知道我的视图中会显示多少个切换,所以我不能只声明一堆 @State 变量。如果我也只创建一个 @State 变量并将其隐藏到我的所有切换中,它们将全部同步,这不是我想要的,我希望它们都是独立的。

下面是我的视图布局的简化示例

private var array: [String]
var body: some View {
    ForEach((0..<self.array.count), id: \.self) {
        Toggle("Show welcome message", isOn: *binding here*)
    }
}

谢谢

您可以简单地创建一个 @State 类型 [Bool] 变量,一个包含所有切换布尔值的数组。

下面是一些示例代码:

struct ContentView: View {
    
    var body: some View {
        ToggleStack(count: 5)
    }
}

struct ToggleStack: View {
    @State private var toggles: [Bool]
    private let count: Int
    
    init(count: Int) {
        self.count = count
        toggles = Array(repeating: true, count: count)
    }
    
    var body: some View {
        VStack {
            ForEach(0 ..< count) { index in
                Toggle(isOn: $toggles[index]) {
                    Text("Checkbox")
                }
            }
        }
    }
}

结果: