Arrays Swift:使用for循环插入项目。最后,当我查询时,它只显示最后插入到每个索引的值

Arrays Swift:使用for循环插入项目。最后,当我查询时,它只显示最后插入到每个索引的值,arrays,swift,Arrays,Swift,在Swift游乐场中,我使用for循环来插入项目。在循环过程中,它似乎在添加正确的值。在for循环的末尾,当数组全部填满时,当我查询时,它只显示最后插入到每个索引的值 斯威夫特新手,所以我想我在这里做了一些非常愚蠢的事情。。。需要帮助 代码如下: class card { var suit: String = "" var rank: String = "" } var card1 = card() var deck = [card]() var playingCard = card(

在Swift游乐场中,我使用for循环来插入项目。在循环过程中,它似乎在添加正确的值。在for循环的末尾,当数组全部填满时,当我查询时,它只显示最后插入到每个索引的值

斯威夫特新手,所以我想我在这里做了一些非常愚蠢的事情。。。需要帮助

代码如下:

class card {
  var suit: String = ""
  var rank: String = ""
}

var card1 = card()
var deck = [card]()
var playingCard = card()

var suits = ["♠︎","♣︎","♥︎","♦︎"]
var ranks = ["A","K","Q","J","10","9","8","7","6","5","4","3","2"]

let countRanks = ranks.count
let countSuits = suits.count
var ctr = 0
for i in 0..<countSuits {
  for j in 0..<countRanks {
    playingCard.rank = ranks[j]
    playingCard.suit = suits[i]
    deck.insert(playingCard, atIndex: 0)
    println("\(deck[ctr].suit)"+"\(deck[ctr].rank)")
    ctr++
  }
}

let x = deck.count
for i in 0..<x {
  println("\(deck[i].rank)"+"\(deck[i].suit)")
}
类卡{
变量:String=“”
var-rank:String=“”
}
var card1=card()
变量组=[卡]()
var playingCard=card()
变量=[”♠︎","♣︎","♥︎","♦︎"]
风险价值等级=[“A”、“K”、“Q”、“J”、“10”、“9”、“8”、“7”、“6”、“5”、“4”、“3”、“2”]
让countRanks=ranks.count
让countSuits=suits.count
var ctr=0

对于0中的i..您需要在每次迭代中初始化playingCard的新实例:

for i in 0..<countSuits {
  for j in 0..<countRanks {
    var playingCard = card()
    ...
  }
}

类实例是引用类型。您需要为每个迭代创建一个新的卡实例。移动行
var playingCard=card()
就在0中j的
之后。谢谢,这很有效。尽管我仍然不确定为什么我需要为每次迭代创建一个新的实例。您的原始代码总是在改变,并且排名总是相同的对象,并且相同的对象被插入了52次。@Ashish在Swift中,类类型是一个引用类型。当您创建数组时,您不需要putt将卡片放入数组中。您正在将引用放入数组中的卡片。现在,因为您只有一张卡片,所以重复输入相同的引用。当您更改卡片中的值时,它会更改所有引用指向的一张实际卡片。感谢您的反馈。我最初尝试追加,但没有为每个迭代创建一个新实例是有效的。
class Card {
  var suit: String
  var rank: String
  init(suit: String, rank: String) {
    self.suit = suit
    self.rank = rank
  }
}

...

var playingCard = Card(suit: suits[i], rank: ranks[j])