我开始学习快速,但遇到了错误。我刚从我正在关注的课程中创建了一个非常简单的应用程序,它根据用户输入的内容计算猫的年龄。应用程序的第一个版本只是用户输入7的时间,我管理todo没有问题。我以为我会玩我写的东西并改变它:
等......
e.g。一只4岁的猫在猫年里会是33岁。
所以我希望我的结果标签说你的猫在猫年里是33岁
这是我写的代码:
@IBAction func findAge(sender: AnyObject) {
var enteredAge = enterAge.text.toInt()
if enteredAge = 1 {
var catYears = 15
resultLabel.text = "You're cat is \(catYears) in cat years"
} else if enteredAge = 2 {
var catYears = 25
resultLabel.text = "You're cat is \(catYears) in cat years"
} else {
var catYears = (15 + 25) + (enteredAge - 2) * 4
resultLabel.text = "You're cat is \(catYears) in cat years"
}
}
@IBOutlet weak var enterAge: UITextField!
@IBOutlet weak var resultLabel: UILabel!
我得到的这个错误在第17行“如果输入Age = 1 {”它声明这个“不能将类型'int'的值赋给'int'类型的值'”
我真的不明白为什么这个值不能是整数,任何帮助都会很棒。
答案 0 :(得分:3)
主要错误(as I said in a comment)是您混淆了赋值运算符 =
和等于运算符 ==
。比较应该是
if enteredAge == 1 { ... }
下一个问题是(as keithbhunter already stated in his answer),
toInt()
会返回可选,如果字符串不是,则返回nil
有效整数,您应该使用可选绑定:
if let enteredAge = enterAge.text.toInt() {
// compute cat years ...
} else {
// report invalid input ...
}
附加说明:
let
。resultLabel.text = ...
,这可以
简化。if ... else if ... else
语句代替switch
。然后你的方法看起来像这样:
if let enteredAge = enterAge.text.toInt() {
let catYears : Int
switch(enteredAge) {
case 1:
catYears = 15
case 2:
catYears = 25
default:
catYears = (15 + 25) + (enteredAge - 2) * 4
}
resultLabel.text = "You're cat is \(catYears) in cat years"
} else {
resultLabel.text = "Please enter a valid number"
}
另一种方法是使用条件运算符 ?:
(有时也称为三元运算符):
if let enteredAge = enterAge.text.toInt() {
let catYears = enteredAge == 1 ? 15 :
enteredAge == 2 ? 25 : (15 + 25) + (enteredAge - 2) * 4
resultLabel.text = "You're cat is \(catYears) in cat years"
} else {
resultLabel.text = "Please enter a valid number"
}
答案 1 :(得分:1)
我不完全确定toInt()
方法,但我猜测该方法返回Int?
。这意味着如果它无法将字符串转换为int,则它可以返回nil。你应该打开这个值来处理nil个案。
if var enteredAge = enterAge.text.toInt() {
// the rest of the code
}
答案 2 :(得分:1)
您已将值分配给enteredAge
变量,如下所示:
var enteredAge = enterAge.text.toInt()
所以,你不能在这个if表达式的位置做作业。你需要在if表达式上有条件如下。
if enteredAge == 1 {
var catYears = 15
resultLabel.text = "You're cat is \(catYears) in cat years"
}
这可能会对你有帮助。
答案 3 :(得分:0)
应如下所示:
@IBAction func button(sender: AnyObject) {
var inputYears = textField.text.toInt()!
if inputYears == 1 {
var catOld = 15
result.text = "Your cat is \(catOld) years old"
}
else if inputYears == 2 {
var catOld = 25
result.text = "Your cat is \(catOld) years old"
}
else {var catOld = (15+25) + (inputYears - 2)*4
result.text = "Your cat is \(catOld) years old"
}