Swift:不能将类型'int'的值赋给'int?'类型的值错误

时间:2015-07-24 15:41:33

标签: ios swift

我开始学习快速,但遇到了错误。我刚从我正在关注的课程中创建了一个非常简单的应用程序,它根据用户输入的内容计算猫的年龄。应用程序的第一个版本只是用户输入7的时间,我管理todo没有问题。我以为我会玩我写的东西并改变它:

  • 第一个人类年= 15个猫年
  • 第二人年= +10
  • 第3人年= + 4
  • 第4人年= +4
  • 人类第5年= +4

等......

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'类型的值'”

我真的不明白为什么这个值不能是整数,任何帮助都会很棒。

4 个答案:

答案 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
  • 有3个相同的作业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"
    }