【发布时间】: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结构。您需要迭代播放器数组,以便获得播放器的索引。