斯威夫特的新手和我有一个令人沮丧的问题。该程序正确编译并运行而不会崩溃。该程序应该基于用户输入的人类年来计算猫年中的猫的年龄。然而,在按下按钮之后,结果显示为"运算符"由括号分隔的猫年附加,即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"
}
}
有谁知道我做错了什么?感谢您的宝贵意见!
答案 0 :(得分: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 :(得分: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")