我正在使用 Swift 进行应用程序开发,但我陷入了第二个项目 Apple Pie 的最后一点。
在指南中,您可以创建一个新文件 Game.Swift,并在该文件中创建一个 struct Game。稍后,它会告诉您
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 次,更不用说谷歌搜索和在 SO 上查看类似(但回答模糊)的问题,但我仍然无法得到它固定了。我找到了一个说要改变的解决方案
correctWordLabel.text = game.formattedWord
至
correctWordLabel.text = currentGame.formattedWord
但这也不起作用。如果有人可以提供帮助,我一定会很感激。我附上了屏幕截图,只是为了进一步说明。
我觉得我在结构 Game 中没有正确声明 formattedWord,但我已经完全按照指南所述进行了所有操作。我仍然得到
Type 'Game' has no member '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
}
}
在您当前的代码中,您在 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
}
}
关于ios - 类型没有成员 - 应用程序开发项目 2,Apple Pie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46463650/