为什么我的标签显示“你的猫是可选的(35岁)”,它应该显示“你的猫是35岁?[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的标签显示“你的猫是可选的(35岁)”,它应该显示“你的猫是35岁?[重复]相关的知识,希望对你有一定的参考价值。

斯威夫特的新手和我有一个令人沮丧的问题。该程序正确编译并运行而不会崩溃。该程序应该基于用户输入的人类年来计算猫年中的猫的年龄。然而,在按下按钮之后,结果显示为由“括号”界定的猫年附加的单词“运算符”,即Optional(35)。这是我的代码:

@IBOutlet weak var getHumanYears: UITextField!
@IBOutlet weak var displayCatYears: UILabel!
@IBAction func calculateCatYears(_ sender: Any) 
{
    if let humanYears = getHumanYears.text
    {
        var catYears: Int? = Int(humanYears)
        catYears = catYears! * 7
        let catYearsString: String = String(describing: catYears)

        displayCatYears.text = "Your cat is " + catYearsString + " years old"
    }
}

有谁知道我做错了什么?感谢您的宝贵意见!

答案

问题出在这里:

String(describing: catYears)

catYears是一个Optional<Int>,一个描述Optional<Int>的字符串将采用Optional(<value>)nil的格式。这就是为什么你得到Optional(35)

你需要打开catYears

String(describing: catYears!)

或者,一起删除String(describing:)并执行:

if let humanYearsText = getHumanYears.text, let humanYears = Int(humanYearsText)
{
    let catYears = humanYears * 7
    displayCatYears.text = "Your cat is (catYears) years old"
}
另一答案

正如其他提到的,这是因为qazxsw poi,这个qazxsw poi是可选的。并且可选的var catYears: Int? = Int(humanYears)打印catYears

你想要的是确保你有值,而不是打印时的可选值。如果您100%确定字符串中有String(describing: ...)值,则可以使用Optional(rawValue)

但是,我建议您不要使用Int运算符,因为如果文本字段中有字符,那么会导致应用程序崩溃。

!
另一答案

打开!。使用这个让catYearsString:String = String(描述:catYear!)displayCatYears.text =“你的猫是”+ catYearsString +“岁”

输出:

测试代码

if let text = getHumanYears.text, let humanYears = Int(text)
{
    let catYears = humanYears * 7
    displayCatYears.text = "Your cat is (catYears) years old"
} else {
    displayCatYears.text = "I don't know!" 
}

catYearsString

以上是关于为什么我的标签显示“你的猫是可选的(35岁)”,它应该显示“你的猫是35岁?[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的渐变子层显示奇怪?

标签上显示的 UIPickerView 选项

在头部添加javascript标签时,我的页面不会显示 - jQuery Mobile

为啥我的 WebPart 上的控件不显示?

如何在 html5 标签中查看视频?

PHP 将 HTML 标签写入文件并显示