我有一個問題,當我在第一個 textFiled 中寫入時,它會在其余文本欄位中重復,如圖所示:

這是我的代碼:首先是模型和視圖模型:
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)
}
}
}
}
uj5u.com熱心網友回復:
是的,因為每次實體化一個新物件時,你給所有的人都提供了相同的 id,而且你基本上最終修改了同一個人。嘗試給一個UUID這樣的Person:
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: ""))
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497940.html
