Foreach 中的 Al TextFields 在 SwiftUI 中同时输入

Al TextFields in Foreach type simultaneously in SwiftUI

从上次 post 开始,我决定创建一个 table,如下所示。但是,当我在一个文本字段中键入内容时,同一个 ForEach 中的所有其他文本字段都会通过相同的输入。有什么我可以做的,让每个文本字段都有自己的实体吗?

另外,当我在 1 视图中有一些这样的内容时,这仍然是一个好的解决方案吗?就太多的 Spacer 和 VStack 而言,这是否太多了?

如何单独跟踪来自文本字段的所有这些输入以存储在 coreData 中?

谢谢,我很感激任何类型的建议。 亲切的问候

import SwiftUI

struct SwiftUIView: View {

@State var B: String = ""
@State var C: String = ""


var body: some View {
    ZStack {
        RoundedRectangle(cornerRadius: 22)
            .fill(Color(.systemGray5))
            .frame(width: 400, height: 130, alignment: .center)
        VStack (alignment: .leading){
            HStack {
                Text("A")
                    .fontWeight(.bold)
Spacer()
                    ForEach(1..<6) { i in
                       Text("\(i)")
                            .fontWeight(.bold)
                    }
                    .frame(width: 50)
                }
                HStack {
                    Text("B")
                    Spacer()
                    ForEach(1..<6) { i in
                        TextField("", text: $B)
                            .background(
                                VStack {
                                    Spacer()
                                    Color
                                        .primary
                                        .frame(height: 1)
                                }
                            )
                            .frame(width: 50, alignment: .trailing)

                }
            }
            
            HStack {
                Text("C")
                Spacer()
                ForEach(1..<6) { i in
                    TextField("", text: $C)
                        .background(
                            VStack {
                                Spacer()
                                Color
                                    .primary
                                    .frame(height: 1)
                            }
                        )
                        .frame(width: 50, alignment: .trailing)

                }
            }
            
        }
        .frame(width: 350, height: 100, alignment: .center)
    }
}
}

您在每个 ForEach 中为 TextFields 使用了相同的变量。您需要使用一些东西的数组,并将 ForEach 键入数组。这是您的代码的简化版本。请注意“B”如何在每个 TextField 中重复您的输入,而“C”却没有?区别在于“C”中的每个 TextField 都在访问自己的存储空间。

struct SwiftUIView: View {

    @State var B: String = ""
    @State var C: [DemoText] = [DemoText(value: ""), DemoText(value: "")]
    
    var body: some View {
        VStack (alignment: .leading){
            HStack {
                Text("B")
                Spacer()
                ForEach(0..<2) { _ in
                    TextField("", text: $B)
                        .background(Color.gray)
                }
            }
            HStack {
                Text("C")
                Spacer()
                ForEach($C) { $element in
                    TextField("", text: $element.value)
                        .background(Color.gray)
                }
            }
        }
    }
}

struct DemoText: Identifiable {
    let id = UUID()
    var value: String
}