我正在使用Swift进行应用程序开发,而我被困在第二个项目Apple Pie中。

在指南中,您可以创建一个新文件Game.Swift,并在该文件内创建一个结构游戏。稍后,它告诉您


  在游戏的定义内创建一个称为formattedWord的计算属性。这是一种计算格式化单词的方法:


var formattedWord: String {
    var guessedWord = ""
    for letter in word.characters {
        if guessedLetters.contains(letter) {
            guessedWord += "\(letter)"
        } else {
            guessedWord += "_"
        }
    }
    return guessedWord
}





  现在,formattedWord是您的UI可以显示的属性,请尝试将其用于updateUI()中的currentWordLabel的文本。


func updateUI() {
    correctWordLabel.text = game.formattedWord
    scoreLabel.text = "Wins: \(totalWins), Losses: \(totalLosses)"
    treeImageView.image = UIImage(named: "Tree \(currentGame.incorrectMovesRemaining)")
}


我已经完全做到了,我检查了大约700次代码和指南,更不用说Google搜索并在此处查看类似(但隐约回答)的问题了,但是我仍然无法解决它。我找到了一种解决方案,据说可以改变

correctWordLabel.text = game.formattedWord




correctWordLabel.text = currentGame.formattedWord


但这也不起作用。如果有人可以提供帮助,我一定会感激的。我附上了scseenshots,以供进一步说明。

View Controller screenshot

struct Game screenshot

我觉得我在结构游戏中还没有正确声明formattedWord,但是我已经按照指南中的说明做了一切。我还在


  类型“游戏”没有成员“ formattedWord”


在View Controller的第45行。请帮忙!

最佳答案

如果选择所有代码,然后自动缩进(键盘快捷键:ctrl + a,然后ctrl + i)。您很快就会看到问题,因为结果代码看起来像

struct Game {
    var word: String
    var incorrectMovesRemaining: Int
    var guessedLetters: [Character]
    mutating func playerGuessed(letter: Character) {
        guessedLetters.append(letter)
        if !word.characters.contains(letter) {
            incorrectMovesRemaining -= 1

            var formattedWord: String {
                var guessedWord = ""
                for letter in word.characters {
                    if guessedLetters.contains(letter) {
                        guessedWord += "\(letter)"
                    } else {
                        guessedWord += "_"
                    }
                }
                return guessedWord
            }
        } // <-- This is where your problem is
    }
}


在当前的代码中,您要在formattedWord函数中声明playersGuessed变量,因此该函数之外的任何内容都无法访问该变量。

您的代码在Game结构中的格式不正确。注意第31-> 33行上的3 }。那是一个很大的危险信号。问题是您没有在第17行关闭if语句,而在第15行没有关闭函数。您需要在第19/20行添加结束}。您的Game结构应如下所示。

struct Game {
    var word: String
    var incorrectMovesRemaining: Int
    var guessedLetters: [Character]
    mutating func playerGuessed(letter: Character) {
        guessedLetters.append(letter)
        if !word.characters.contains(letter) {
            incorrectMovesRemaining -= 1
        } // <-- This is where your problem is
    }

    var formattedWord: String {
        var guessedWord = ""
        for letter in word.characters {
            if guessedLetters.contains(letter) {
                guessedWord += "\(letter)"
            } else {
                guessedWord += "_"
            }
        }
        return guessedWord
    }
}

07-26 09:40