我正在开发一个将玩家对象存储在数组中的游戏。我想通过以下方式为这些玩家提供帮助:
var players = [Player]()
mutating func deal(count: Int) {
for var player in players {
for _ in 1...count {
if let card = deck.draw(){
player.addCard(card: card)
}
}
if (player.id==1){print(player)}
}
print(players[0])
}
struct Player{
var id : Int
private(set) var randomValue: Int = 0
private(set) var hand = [PlayingCard]()
init(id: Int) {
self.id = id
randomValue = 100.arc4random
}
mutating func addCard(card: PlayingCard){
hand.append(card)
}
}
问题是指针实际上没有被更新。在for循环内将索引为0(player.id == 1)的播放器打印出来,这正是我所期望的。但是,循环外的打印品是空的,随机数是不同的。所以我知道循环由于调用init而正在创建一个新对象。为什么会发生这种情况,以及如何在players数组中编辑实际对象?
答案 0 :(得分:2)
player
是结构,当您迭代players
时-将获得数组中播放器的副本。
您对其进行了更新,打印并看到正确的结果,但是它的作用域仅适用于for
循环。
将player
设为一个类,或者使用player
的新副本更新您的数组。