为什么我的标签显示“你的猫是可选的(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岁?[重复]的主要内容,如果未能解决你的问题,请参考以下文章