Swift for循环正在创建新对象

时间:2018-07-08 19:04:10

标签: 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)
            }
        }
        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数组中编辑实际对象?

1 个答案:

答案 0 :(得分:2)

player是结构,当您迭代players时-将获得数组中播放器的副本。
您对其进行了更新,打印并看到正确的结果,但是它的作用域仅适用于for循环。
player设为一个类,或者使用player的新副本更新您的数组。