【问题标题】:Swift: How to assign a value to a variable inside an array?Swift:如何为数组中的变量赋值?
【发布时间】:2021-04-27 16:43:45
【问题描述】:

对于 Swift 中可能是初学者的问题,我遇到了一些麻烦:

我正在尝试根据所选的游戏类型和游戏难度将一些高分保存到我想要永久保存的变量中。

最好使用循环来完成,因为在我的实际代码中会有许多不同的游戏/难度组合,因此 if 语句会变得非常大。我尝试做的看起来有点像这样(我不知道该怎么做的部分标有注释):

var hiScoreEasyA = 0
var hiScoreHardA = 0
var hiScoreEasyB = 0
var hiScoreHardB = 0

var currentGame = "A"
var currentDifficulty = "Easy"

var currentScore = "9999"

var newHiScore = false

func setHiScore() -> Void {
    var hiScores: [[Any]] = [
        ["A", "Easy", hiScoreEasyA],
        ["A", "Hard", hiScoreHardA],
        ["B", "Easy", hiScoreEasyB],
        ["B", "Hard", hiScoreHardB]   
    ]

    for hi in hiScores.indices {
        if (hiScores[hi][0] as! String) == currentGame && (hiScores[hi][1] as! String) == currentDifficulty {
            if (hiScores[hi][2] as! Int) < currentScore {
                newHiScore = true
                //Here I would need to assign the value of currentScore to the variable stored in hiScores[hi][2] (hiScoreEasyA)
            }
        }
    }
}

到目前为止,代码似乎可以工作,但我还没有找到任何实用的方法来将当前分数分配给正确的高分变量。

任何想法如何解决这个问题?非常感谢您的帮助。

【问题讨论】:

    标签: ios arrays swift loops


    【解决方案1】:

    你走错了路。如果你的游戏有很多难度和游戏类型,那么你应该去掉这些变量:

    var hiScoreEasyA = 0
    var hiScoreHardA = 0
    var hiScoreEasyB = 0
    var hiScoreHardB = 0
    

    并将它们替换为将每个高分类别映射到高分的字典。 “高分类别”只是难度和游戏类型的组合,例如“易A”、“难B”:

    struct HighscoreCategory: Hashable {
        let difficulty: String
        let gameType: String
    }
    

    字典看起来像这样:

    var highScores = [
        HighscoreCategory(difficulty: "Easy", gameType: "A"): 0,
        HighscoreCategory(difficulty: "Hard", gameType: "A"): 0,
        HighscoreCategory(difficulty: "Easy", gameType: "B"): 0,
        HighscoreCategory(difficulty: "Hard", gameType: "B"): 0,
    ]
    

    现在设置当前游戏类型和难度的高分,你根本不需要任何循环!你只是这样做

    func setHiScore() -> Void {
        let highScoreCategory = HighscoreCategory(difficulty: currentDifficulty, gameType: currentGame)
        let previousHighscore = highScores[highScoreCategory] ?? 0
        if previousHighscore < currentScore {
            newHiScore = true
            highScores[highScoreCategory] = currentScore // this is the line where you set it
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      相关资源
      最近更新 更多