无法在使用SwiftUI的ForEach循环中获取@state变量

无法在使用SwiftUI的ForEach循环中获取@state变量,swiftui,Swiftui,我想用ForEach循环生成一个输入文本字段列表。文本字段显然是@State变量 我确实得到了错误: 泛型结构“ForEach”要求“Binding”符合 “可散列” 这是我的密码: struct ContentView: View { @State private var mainPrice = "" @State private var mainGrade = "" var body: some View {

我想用ForEach循环生成一个输入文本字段列表。文本字段显然是@State变量

我确实得到了错误:

泛型结构“ForEach”要求“Binding”符合 “可散列”

这是我的密码:

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)
         }
     }