Swift3 @IBAction func内的未解析标识符错误

Swift3 @IBAction func内的未解析标识符错误,swift3,xcode8,ios10.3,Swift3,Xcode8,Ios10.3,我正在编写一个基本的iOS应用程序来测试我的Swift知识并继续练习。在我的应用程序中,用户键入婴儿的名字,然后打开或关闭开关来设置性别/性别,并更改系统颜色。 之后,该名称用于在以下代码块中填充名为“firstWords”的UITextView: // Save name entered into text field @IBAction func saveSettings(_ sender: UIButton) { nameLabel.text = nameTextField.tex

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

// 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!"
}
我一直在元组
(sex.5)
中发现一个错误,上面写着:“
使用未解析的标识符‘sex’

据我所知,常量
sex
是在
if
语句中声明的,编译器会以任何一种方式对其进行处理,因此它会被识别和声明。 问题:我为什么会出错

提前谢谢!下面是我的代码截图:
这是一个范围问题
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!"
}
这种方式在整个
iAction
的范围内定义了
sex
,最终将可用

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

// 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!"
}

实际上,维基百科上有一篇关于变量作用域的好文章:

这是一个作用域问题
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!"
}
这种方式在整个
iAction
的范围内定义了
sex
,最终将可用

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

// 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!"
}

实际上,维基百科上有一篇关于变量作用域的好文章:

谢谢你的快速回答,塞巴斯蒂安,但在我的情况下它不起作用。。。在
if
语句中,我现在得到了一个错误:“无法将String、String、String…赋值给String的值…但是我尝试了其他一些似乎很好的方法-在
if
之前声明变量,然后在那里赋值。它稍后会被更改,然后使用
(sex.5)
callin
firstWords
100%有效。无论如何,感谢您的支持help@Junsan修正了我用正确类型声明varialbe的答案。不过,我建议使用第二个版本。一般来说,这是处理这种情况的一种非常容易出错的方法。我强烈建议您在这种情况下使用已定义的结构:)是的,我希望改进随着我的进一步学习,我的编码。感谢您的建议感谢您的快速回答,Sebastian,但它在我的情况下不起作用…在
if
语句中,我现在收到错误:“无法分配字符串,字符串,字符串…”。。。到字符串的值。。。但是我尝试了其他一些似乎效果不错的方法——在
if
之前声明变量,然后在那里赋值。它会在以后被更改,然后使用
(sex.5)
调用内部
第一个单词
100%有效。无论如何,谢谢你的帮助help@Junsan修正了我用正确类型声明varialbe的答案。但是我会推荐第二个版本。一般来说,这是一种非常容易出错的处理这种情况的方法。我强烈建议您在这种情况下使用已定义的结构:)是的,我希望在进一步学习时改进我的编码。谢谢你的建议