无需绑定的 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")
}
}
}
}
}
结果:
这似乎是个奇怪的问题,但我环顾四周,似乎找不到答案。
我想在未绑定到任何变量的视图中创建切换。想象一下可以切换但实际上什么都不做的切换开关列表。
我已经尝试过使用 .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")
}
}
}
}
}
结果: