我正在使用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
}
}