Я хочу создать коробочное приложение для записи gameData. я хочу показать пользовательские данные в представлении, когда я использую @ObseveredObject var selectedPlayer = PlayerGameData (). Он показывает, что нельзя присваивать свойству: «self» является неизменным .. и как я могу позволить @ObservedObject var Players автоматически изменять мой текст? Если я добавлю var player6 в проигрыватели. Он не изменился автоматически. Казалось, что вам нужно поместить ObseverdObject (player1,2,3) в Players, чтобы его можно было использовать. Вот видео https://www.youtube.com/watch?v=-ZN18DAhXgY&feature=youtu.be
class PlayerGameData: Identifiable, ObservableObject{
@Published var id = UUID()
@Published var name: String = ""
@Published var point: Int = 0
@Published var atkRebound: Int = 0
@Published var Rebound: Int = 0
init() {
for _ in 0 ..< 5 {
PlayersGameDataArray.append(PlayerGameData())
}
}
}
class PlayersGameData: Identifiable, ObservableObject{
var id = UUID()
@Published var PlayersGameDataArray: [PlayerGameData] = []
}
struct GameRecordView: View {
@ObservedObject var players : PlayersGameData = PlayersGameData()
@State var playingPlayers : PlayersGameData = PlayersGameData()
@ObservedObject var player1 = PlayerGameData()
@ObservedObject var player2 = PlayerGameData()
@ObservedObject var player3 = PlayerGameData()
@State var selectedPlayer = PlayerGameData()
var body: some View {
VStack(spacing:30){
HStack {
VStack{
Button(action:{
self.selectedPlayer = self.player1
}){
Text("Player1")
Image(selectedPlayer.name)
}
Button(action: {}){
Text("change")
}
}
}
Button(action:{
self.selectedPlayer = self.player2
}){
Text("Player2")
}
Button(action:{
self.selectedPlayer = self.players.PlayersGameDataArray[4]
}){
Text("\(playingPlayers.PlayersGameDataArray[4].name)")
}
if(players.PlayersGameDataArray.count > 0){
// Text("\(selectedPlayer.name)\(selectedPlayer.attRebound)")
StepperButton(playerData: selectedPlayer)
}
}.onAppear(
perform: AddPlayer
)
}
func AddPlayer(){
player1.name = "Frank"
player2.name = "Jack"
player3.name = "Petter"
var player4 = PlayerGameData()
player4.name = "Andy"
var player5 = PlayerGameData()
player5.name = "Robin"
var player6 = PlayerGameData()
player6.name = "Jack"
players.PlayersGameDataArray.append(player1)
players.PlayersGameDataArray.append(player2)
players.PlayersGameDataArray.append(player3)
players.PlayersGameDataArray.append(player4)
players.PlayersGameDataArray.append(player5)
players.PlayersGameDataArray.append(player6)
}
}
struct StepperButton:View{
@ObservedObject var playerData: PlayerGameData
var body: some View {
VStack {
Text("\(playerData.name)得分\(playerData.point)")
Stepper(value: $playerData.point, in: 0...100, label: { Text("score: \(playerData.point)")})
.padding(3)
.labelsHidden()
Text("\(playerData.name)進攻籃板\(playerData.attRebound)")
Stepper(value: $playerData.attRebound, in: 0...100, label: { Text("atkrebound: \(playerData.attRebound)")})
.padding(3)
.labelsHidden()}
}
}