无法在使用SwiftUI的ForEach循环中获取@state变量
我想用ForEach循环生成一个输入文本字段列表。文本字段显然是@State变量 我确实得到了错误: 泛型结构“ForEach”要求“Binding”符合 “可散列” 这是我的密码:无法在使用SwiftUI的ForEach循环中获取@state变量,swiftui,Swiftui,我想用ForEach循环生成一个输入文本字段列表。文本字段显然是@State变量 我确实得到了错误: 泛型结构“ForEach”要求“Binding”符合 “可散列” 这是我的密码: struct ContentView: View { @State private var mainPrice = "" @State private var mainGrade = "" var body: some View {
struct ContentView: View {
@State private var mainPrice = ""
@State private var mainGrade = ""
var body: some View {
var inputFields = [$mainPrice,$mainGrade]
HStack {
List{
ForEach(inputFields, id: \.self) { value in /// here is the error
TextField("Enter data", text: value)
}
}
}
}
所以,我把绑定变量放在一个数组中,因为我需要一个绑定类型在循环中,也许这不是怎么做的?我试图向inputFields变量添加Hashable以响应错误消息,但我怀疑整个设置都是错误的。我实际上找到了另一种方法,使用具有id的结构来实现这一点,因为主要问题似乎是数组没有提供准确的数据标识。我们需要一个id(见视频)https://www.hackingwithswift.com/books/ios-swiftui/working-with-identifiable-items-in-swiftui):
struct ContentView: View {
@State private var mainPrice = ["1000", "5000"]
var body: some View {
HStack {
List {
ForEach(mainPrice.indices, id: \.self) { index in
TextField("Enter data", text: $mainPrice[index])
}
}
}
}
}
和ForEach循环
List{
ForEach(textFields, id: \.id) { value in
TextField("", text: value.data)
}
}
哇,这有用。我承认我不明白Bindingwrapper在做什么以及为什么。在研究您对UUID的使用时,我发现了这个有用的视频。我越来越接近于理解你所做的事情。如果你的答案格式正确,你的答案更有可能受到好评(因此也会被提高投票率)。另外,请尝试添加一些代码解释。我认为这适用于一个具有不同值的变量,但我所追求的是在我的代码mainPrice中的ForEach循环中有多个@State变量。price不是一个变量!这是一个数据数组,按照您的方式,在您接受的答案中,您仅将自己限制为2个变量,但在我的编码版本中,您可以拥有任意多的变量,您可以拥有0到数千个变量!如果你有两个以上的变量,你的方法就会失败,在我的代码中,你只是简单地将新数据附加到一个已有的变量上。
struct tableContent{
var id: Int
var label: String
var data: Binding<String>
}
let textFields = [
tableContent(id: 1, data: $mainPrice),
tableContent(id: 2, data: $mainGrade)
]
List{
ForEach(textFields, id: \.id) { value in
TextField("", text: value.data)
}
}