ios - 类型没有成员 - 应用程序开发项目 2,Apple Pie

标签 ios swift xcode member xcode9

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

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

View Controller screenshot

struct Game screenshot

我觉得我在结构 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/

相关文章:

iphone - 打印出变量名

iPhone将 View Controller 插入导航栏内的标签栏内

swift - 如何将供应商/产品 ID 添加到 USB 匹配字典

ios - exceptedActivityTypes 在 Swift 3 中不起作用

ios - xcode 6 自定义标签栏在选择图像之前不显示图像

ios - 无法在界面生成器中编辑工具栏的属性

ios - swift 3.0 的选择器语法

ios - iOS 上的 NSCollectionView

ios - Facebook iOS SDK 强制登录

ios - 配置文件 iOS 团队即将到期(免费帐户)