Как наблюдать свойство элемента в @ObservedObject - PullRequest
0 голосов
/ 18 января 2020

Я хочу создать данные игрока в своем списке, я также хочу, чтобы моя кнопка могла редактировать номер игрока. Когда я добавляю плеер, список показывает очень хорошо. Когда я редактировал число, в списке не показывался новый результат. Можно ли заставить 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] = []

}
...