@IBAction 函数中未解决的标识符错误

Unresolved Identifier error within @IBAction func

我正在编写一个基本的 iOS 应用程序来测试我的 Swift 知识并继续练习。在我的应用程序中,用户输入婴儿的名字,然后打开或关闭开关以设置 gender/sex 并更改系统颜色。 之后,这个名字用来填充一个UITextView,取名为"firstWords",在下面的代码块中:

// Save name entered into text field
@IBAction func saveSettings(_ sender: UIButton) {
    nameLabel.text = nameTextField.text
    if nameTextField.text == "" {
        showMessage()
        nameLabel.text = "Baby Name"
    }
    nameTextField.resignFirstResponder()
    let nameHolder: String! = nameLabel.text
    if boyGirlSwitch.isOn {
        let sex = ("boy", "his", "he", "Boy", "His", "He")
    } else {
        let sex = ("girl", "her", "she", "Girl", "Her", "She")
    }
    firstWords.text = "Wow, " + nameHolder + " has so much to look forward to!" + (sex.5) + " will do so many great things!"
}

我一直在 firstWords 内的元组 (sex.5) 处收到错误消息:“Use of unresolved identifier 'sex'

据我所知,常量 sexif 语句中声明,并且编译器确实以任何一种方式通过它,因此它确实得到识别和声明。 问题:为什么我会收到错误消息?

提前致谢!这也是我的代码的屏幕截图: Screenshot of block of code as described above, including the compiler/build-error

这是范围问题。 sex 仅在 else 子句中可用。

你可以这样修复

// Save name entered into text field
@IBAction func saveSettings(_ sender: UIButton) {
    nameLabel.text = nameTextField.text
    if nameTextField.text == "" {
        showMessage()
        nameLabel.text = "Baby Name"
    }
    nameTextField.resignFirstResponder()
    let nameHolder: String! = nameLabel.text
    var sex : (String, String, String, String, String, String)
    if boyGirlSwitch.isOn {
        sex = ("boy", "his", "he", "Boy", "His", "He")
    } else {
        sex = ("girl", "her", "she", "Girl", "Her", "She")
    }
    firstWords.text = "Wow, " + nameHolder + " has so much to look forward to!" + (sex.5) + " will do so many great things!"
}

这样sex定义在整个IBAction范围内,最终会可用

如果您使用默认值预先声明一个条件,您也可以跳过它:

// Save name entered into text field
@IBAction func saveSettings(_ sender: UIButton) {
    nameLabel.text = nameTextField.text
    if nameTextField.text == "" {
        showMessage()
        nameLabel.text = "Baby Name"
    }
    nameTextField.resignFirstResponder()
    let nameHolder: String! = nameLabel.text
    var sex = ("girl", "her", "she", "Girl", "Her", "She")
    if boyGirlSwitch.isOn {
        sex = ("boy", "his", "he", "Boy", "His", "He")
    }
    firstWords.text = "Wow, " + nameHolder + " has so much to look forward to!" + (sex.5) + " will do so many great things!"
}

维基百科上实际上有一篇关于变量范围的好文章:https://en.wikipedia.org/wiki/Scope_(computer_science)