Type没有成员——App开发项目2,Apple Pie

Type has no member - App Development Project 2, Apple Pie

我正在与 Swift 一起完成应用程序开发,我被困在第二个项目 Apple Pie 的最后一点。

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

Create a computed property called formattedWord within the definition of Game. Here's one way to compute formattedWord:

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

Now that formattedWord is a property that your UI can display, try using it for the text of currentWordLabel inside of updateUI().

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

我完全做到了这一点,我已经检查了代码和指南大约 700 次,更不用说 google 搜索并在 SO 上查看类似(但模糊回答)的问题,但是我仍然无法修复它。我找到了一个解决方案,据说可以更改

correctWordLabel.text = game.formattedWord

correctWordLabel.text = currentGame.formattedWord

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

View Controller screenshot

struct Game screenshot

我觉得我没有在 struct Game 中正确声明 formattedWord,但我已经按照指南中的说明进行了所有操作。我还在收到

Type 'Game' has no member 'formattedWord'

在视图控制器的第 45 行。请帮忙!

如果您 select 所有代码,并自动缩进(键盘快捷键: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
    }
}

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

您的代码在 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
    }
}