【问题标题】:Swift for loop is creating new objectsSwift for 循环正在创建新对象
【发布时间】:2018-07-08 19:04:10
【问题描述】:

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

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[index].addCard(card: card)将修改players数组中的player结构。您需要迭代播放器数组,以便获得播放器的索引。

标签: swift struct


【解决方案1】:

player 是结构体,当您迭代 players 时 - 您会获得数组中玩家的副本。
您更新它、打印它并查看正确的结果,但它的范围仅适用于 for 循环。
player 设为一个类或使用player 的新副本更新您的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多