【问题标题】:xcode swift is not refilling arrayxcode swift没有重新填充数组
【发布时间】:2020-07-06 17:13:02
【问题描述】:

我有一个循环遍历纸牌游戏轮次的脚本,在这种情况下,我有 4 张牌和 10 轮。

当卡片数组为空时,我想重新填充卡片数组并再次洗牌并继续。

但不知何故,重新填充不起作用,我收到错误 Index out of range

这是我的代码:

struct card {
    var name: String
    var val: Int
}

var allCards: [card] = []
allCards.append(card(name: "card A", val: 10))
allCards.append(card(name: "card B", val: 3))
allCards.append(card(name: "card C", val: 5))
allCards.append(card(name: "card D", val: 5))

class rounds {
    var roundNumber = 10
    var cards = allCards
    
    func playRounds() {
        switch self.roundNumber {
        case 10:
            self.cards.shuffle()
            self.roundNumber -= 1
        case 1...9:
            if cards.count == 0 {
                print("Cards shuffled")
                self.cards = allCards
                self.cards.shuffle()
            }
            self.cards.removeFirst()
            self.roundNumber -= 1
        default:
            print("End of game")
        }
    }
}

var playGame = rounds()

for _ in (0...10) {
    playGame.playRounds()
    print("Count of cards: \(playGame.cards.count)")
    print("Round: \(playGame.roundNumber)")
    print("Card name: \(playGame.cards[0].name)\n")

这是我在调试窗口中的结果:

卡数:4 回合:9 卡名:卡 A

卡数:3 回合:8 卡名:卡 D

卡数:2 回合:7 卡名:卡 B

卡数:1轮:6卡名:卡C

卡数:0 回合:5 致命错误:索引超出范围:文件

在 case 1...9 的 if 语句中,我有一个 print("Cards Shuffled") 我在调试窗口中看不到,对我来说它看起来有一个if 语句中的问题,但我不明白这有什么问题。

顺便说一句。底部的 for 循环用于测试目的,当这个脚本工作时,我会将此脚本分配给一个按钮

【问题讨论】:

    标签: arrays swift


    【解决方案1】:

    如果数组的索引 0 为空,则您无法访问它,因此您需要在访问它之前先检查它

    if (!playGame.cards.isEmpty) {
        print("Card name: \(playGame.cards[0].name)\n")
    }
    

    另一种方法是使用first 而不是索引0

    guard let firstCard = playGame.cards.first else { continue }
    print("Card name: \(firstCard.name)\n")
    

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 2020-07-14
      相关资源
      最近更新 更多