gpt4 book ai didi

binding - 如何在 SwiftUI 中的 foreach 循环中设置切换状态

转载 作者:行者123 更新时间:2023-12-02 16:43:27 26 4
gpt4 key购买 nike

当我尝试在字典的值循环内设置显示切换时,我从错误消息中得到的帮助很少。

如果我取消注释下面的 3 行注释代码,并尝试为循环中的每个属性添加切换,则会收到以下错误:

无法将类型“HStack, Text, ConditionalContent)>>”的值转换为闭包结果类型“_”

import SwiftUI

struct properties {
var id : Int
var property : String
var isOn : Bool
}

struct ContentView: View {

@State var propertyValues: [properties] = [properties(id: 1, property: "DemoData", isOn: true),
properties(id: 2, property: "ShowLocalEvents", isOn: false)]

var body: some View {
NavigationView {
VStack {
List {
ForEach(propertyValues.identified(by: \.id)) { propertyValue in
HStack {
// Toggle(isOn: propertyValue.isOn) {
// Text("")
// }
Text("\(propertyValue.property)")
if propertyValue.isOn {
Text("On")
} else {
Text("Off")
}
}
}
}
}
}
}
}

最佳答案

这里的问题是初始化器 Toggle(isOn:label:)需要 Binding<Bool>为其 isOn参数而不仅仅是 Bool 。一个Binding<_>是一种属性的可读可写“ View ”,它允许控件更新它不拥有的值,并将这些更改传播给拥有该属性的任何人。

编辑:我让这个变得比需要的更复杂。作品如下:

ForEach($propertyValues.identified(by: \.id.value)) { (propertyValue: Binding<properties>) in
HStack {
Toggle(isOn: propertyValue.isOn) {
Text("")
}
// ...
}
}

通过使用 $propertyValues ,我们正在访问Binding数组本身,它被转换为每个元素的绑定(bind)。

编辑:

要使上述工作正常,您需要添加 .value在正文中的几个位置,以便您引用实际值而不是值的绑定(bind)。

关于binding - 如何在 SwiftUI 中的 foreach 循环中设置切换状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56615918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com