Swift for loop正在创建新对象

Swift for loop正在创建新对象,swift,struct,Swift,Struct,我正在做一个游戏,我把我的玩家对象存储在一个数组中。我想给这些玩家一手牌,我这样做的方式如下: 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)

我正在做一个游戏,我把我的玩家对象存储在一个数组中。我想给这些玩家一手牌,我这样做的方式如下:

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数组中的实际对象?

player
是struct,当您迭代
players
时,您将获得数组中的播放器的副本。
您可以对其进行更新、打印并查看正确的结果,但其范围仅限于
for
循环。

使
player
成为一个类或使用
player
的新副本更新数组

player
是struct,当你迭代
players
时,你会得到数组中players的副本。
您可以对其进行更新、打印并查看正确的结果,但其范围仅限于
for
循环。

使
player
成为一个类或使用
player
的新副本更新数组

将其作为类尝试???语法
players[index].addCard(card:card)
将修改players数组中的player结构。您需要迭代玩家数组,以便获得玩家的索引。将其作为类进行尝试???语法
players[index]。addCard(card:card)
将修改玩家数组中的玩家结构。您需要迭代玩家数组,以便获得玩家的索引。