为什么我的标签显示"你的猫是可选的(35岁)"何时显示"你的猫是35岁?

时间:2017-12-28 07:28:07

标签: ios swift type-conversion label

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

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

3 个答案:

答案 0 :(得分:4)

问题在于:

String(describing: catYears)

catYearsOptional<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 :(得分:1)

正如其他提到的那样,这是因为var catYears: Int? = Int(humanYears),因此catYears是可选的。可选的String(describing: ...)会打印Optional(rawValue)

您想要的是确保您拥有该值,而不是打印时的可选值。如果您100%确定字符串中确实有Int值,则可以使用!执行该操作。

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

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

答案 2 :(得分:0)

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

<强>输出:

测试代码

var catYears: Int? = Int(7)
catYears = catYears! * 7
let catYearsString: String = String(describing: catYears!)

print("Your cat is " + catYearsString + " years old")

enter image description here