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

问题描述 投票:1回答:3

斯威夫特的新手和我有一个令人沮丧的问题。该程序正确编译并运行而不会崩溃。该程序应该基于用户输入的人类年来计算猫年中的猫的年龄。然而,在按下按钮之后,结果显示为由“括号”界定的猫年附加的单词“运算符”,即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"
    }
}

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

ios swift type-conversion label
3个回答
4
投票

问题出在这里:

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

1
投票

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

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

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

!

0
投票

打开!。使用这个让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

© www.soinside.com 2019 - 2024. All rights reserved.