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)
将修改玩家数组中的玩家结构。您需要迭代玩家数组,以便获得玩家的索引。