我有一个问题,当我在第一个文本字段中写入时,它会在其余文本字段中重复,如图所示:

enter image description here

这是我的代码:

struct  Person: Identifiable {
    var id: String
    var name : String
    var age : String
}

class PersonViewModel : ObservableObject{
  
    @Published var PersonArray = [Person]()
    
    func emptyPersonArray() {
        self.PersonArray.append(Person(id: "", name: "", age: ""))
    }
   
}

以下是我的观点:

struct ContentView: View {
    @ObservedObject var personViewModel = PersonViewModel()
   
    var body: some View {
        VStack{
            Button(action: {
                personViewModel.emptyPersonArray()
            
            }) {
                HStack {
                   
                    Text("Add")
                        .font(.title3)
                        .bold()
                }
            }
            .padding()
            .foregroundColor(Color.black)
        .frame(width: 150.72, height: 40)
        .background(RoundedRectangle(cornerRadius: 6).stroke(Color(red: 0.463, green: 0.483, blue: 1.034), lineWidth: 2))
            
            
        List{
            ForEach(personViewModel.PersonArray) {person in
                PersonView(name: person.name, age: person.age)
            }
        }
        }
    }
}

最后,这里是PersonView:

struct PersonView: View {

    @State var name = ""
    @State var age = ""
    
    var body: some View {
        
        ZStack {
            RoundedRectangle(cornerRadius: 9)
                .fill(Color.white)
                .frame(width: 650, height: 180)
            
            VStack (alignment: .center) {
               
                  
                        Text("Person")
                            .font(.title3)
                            .fontWeight(.bold)
                          
                  
                VStack{
                Text("Enter Name:")
                    TextField("", text: $name)
                        
                        .frame(width: 289, height: 40.0)
                        .background(RoundedRectangle(cornerRadius: 6).stroke(Color.black))
                    
                Text("Enter Age:")
                    TextField("", text: $age).padding()
                        .frame(width: 289, height: 40.0)
                        .background(RoundedRectangle(cornerRadius: 6).stroke(Color.black))
                }   .padding(.leading)
              
            }
        }
    }
}

推荐答案

是的,因为每次实例化一个新对象时,您都会给所有人提供相同的id,基本上最终会修改同一个人.试着给Person打一个这样的UUID分:

struct  Person: Identifiable {
    var id: UUID = UUID()
    var name : String
    var age : String
}

class PersonViewModel : ObservableObject{
    
    @Published var PersonArray = [Person]()
    
    func emptyPersonArray() {
        self.PersonArray.append(Person(name: "", age: ""))
    }
    
}

Ios相关问答推荐

如何仅在TextField中的文本发生更改时才执行代码?

当操作修改查看条件时,按钮不重复

Xcode 15阻止我的应用程序运行:由于实时模式录制的高比率,丢失了1条日志(log)/路标消息?

objc[25442]:Swift类的扩展和类别不允许有+load方法

在flatter_riverpod中,如果没有ref对象,我们如何访问提供程序?

_SKStoreProductParameterAdNetworkSourceIdentifier未定义符号

从iOS键盘输入时Flutter TextField输入消失

过渡动画在 iOS16 中不起作用,但在 iOS15 中起作用

从远程通知启动时,iOS 应用程序加载错误

-1103 错误域=NSURLErrorDomain 代码=-1103资源超过最大大小iOS 13

iOS 11 navigationItem.titleView 宽度未设置

如何隐藏uitabbar控制器

从 NSUserDefaults 字典 iOS 中删除所有键

aps-environment 始终在发展

Storyboard Segue 从视图控制器到自身

文本未包含在 swift UI 中

由于 GoogleSignIn、AdMob 提交应用程序时 iOS 10 GM 发布错误应用程序try 在没有使用说明的情况下访问隐私敏感数据

Swift:如何在设备旋转后刷新 UICollectionView 布局

在 iOS 上没有显示数字键盘

Info.plist 实用程序错误:无法打开 Info.plist,因为没有这样的文件