Я хочу создать данные игрока в своем списке, я также хочу, чтобы моя кнопка могла редактировать номер игрока. Когда я добавляю плеер, список показывает очень хорошо. Когда я редактировал число, в списке не показывался новый результат. Можно ли заставить ObservedObject наблюдать свойство элемента? Я пытаюсь добавить элемент @State в свой ObservedObject, и он работает, но я не думаю, что это правильный путь. И чем отличаются @State и @ObservedObject? Когда я хочу использовать свой ObservedObject в fun c, он говорит мне: «Невозможно присвоить свойству:« self »является неизменным». Очень признателен за любую помощь.
struct TestView: View {
@ObservedObject var team: TeamMembers = TeamMembers()
@ObservedObject var addPlayer: TeamMember = TeamMember()
@State var number: Int = 0
@State var index: Int = 0
@State var name: String = ""
var body: some View {
VStack(alignment: .leading) {
List(team.teamMembersArray){ (member) in
Text(member.userName)
Text("\(member.uniformNumber)")
}
Text("input uniformNumber")
TextField("input uniformNumber", value: $number, formatter: NumberFormatter())
Text("input index need to edit")
TextField("input index need to edit", value: $index, formatter: NumberFormatter())
Text("input player name")
TextField("input player name", text: $name)
Button(action: self.addNewPlayer){
Text("Add new player")
}
Button(action: self.editPlayer){
Text("edit player name")
}
}
}
func addNewPlayer(){
let newplayer: TeamMember = TeamMember()
// self.addPlayer.userName = name
// self.addPlayer.uniformNumber = number
newplayer.userName = name
newplayer.uniformNumber = number
team.teamMembersArray.append(newplayer)
}
func editPlayer(){
print("Array[\(index)]\(team.teamMembersArray[index].userName)")
team.teamMembersArray[index].userName = name
print(name)
print("Array[\(index)]\(team.teamMembersArray[index].userName)")
}
}
Вот мой ObserableObject
class TeamMember : Identifiable, ObservableObject{
var id = UUID()
@Published var userId : Int = 0
@Published var userName: String = ""
@Published var uniformNumber: Int = 0
@Published var role: String = ""
}
class TeamMembers : Identifiable, ObservableObject{
var id = UUID()
@Published var teamMembersArray : [TeamMember] = []
}