Swift for loop 正在创建新对象



我正在开发一款将玩家对象存储在数组中的游戏。我想给这些玩家一手牌,我通过以下方式这样做:

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。为什么会发生这种情况,如何编辑玩家数组中的实际对象?

player是结构的,当你迭代players时 - 你会得到数组中玩家的副本。
您更新它,打印它并看到正确的结果,但它的范围仅适用于for循环。
要么player类,要么使用player的新副本更新数组。

最新更新