iOS 9在展开可选值时找到了nil。什么价值不存在?

时间:2016-01-12 03:33:40

标签: ios swift ios9

我正在建立一个有两个字段的卡路里计数器: 一:输入每份卡路里。 二:输入份数。

还有一个“剩余的卡路里”。标签从2000开始。每次用户输入数据集时,应重新计算剩余的卡路里。

这是我的代码:

class ViewController: UIViewController, UITextFieldDelegate {

    //MARK:Properties
    @IBOutlet weak var enteredCalories: UITextField!
    @IBOutlet weak var enteredServings: UITextField!
    @IBOutlet weak var calorieCount: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        //Communicate user inputs into textFields through Delegate callbacks
        enteredServings.delegate = self

    //UITextFieldDelegate
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        //Hide the keyboard
        enteredServings.resignFirstResponder()
        return true
    }

    //MARK:Actions
    @IBAction func enterButton(sender: AnyObject) {

        let startingCalories = Int(calorieCount.text!)!

        if calorieCount != nil {

        let calories = Int(enteredCalories.text!)!

        let servings  = Int(enteredServings.text!)!

        let calculation = calories * servings

        calorieCount.text = "\( startingCalories - calculation)"
        enteredServings.text = " "
        enteredCalories.text = " "

        }
    }
}

第一次通过这个过程很好。输入cal./serving和#of serves的任意组合并运行应用程序,并更新剩余的卡路里计数器标签。

每当在文本字段中输入第二个数据集时,我会收到一个错误,告诉我其中一个未包装的可选值没有值。如果cal.counter标签,卡路里/服务字段和#of servings字段仍有值,为什么会出现此错误?

我对编程很陌生,我知道这是一个多次被问过的问题。我理解错误意味着什么,而不是它对我的代码意味着什么,所以我不知道从哪里开始修复它。

1 个答案:

答案 0 :(得分:1)

修改此方法,如下所示

 @IBAction func enterButton(sender: AnyObject) {

    let startingCalories = Int(calorieCount.text!)!

    if calorieCount != nil {

    if let calories = Int(enteredCalories.text!)!, let servings  = Int(enteredServings.text!)!{

    let calculation = calories * servings

    calorieCount.text = "\( startingCalories - calculation)"
    enteredServings.text = " "
    enteredCalories.text = " "
    }

    }

这不会给你一个崩溃,但不确定它是否会按预期工作。尝试使用断点检查值,或尝试使用print()在控制台上打印它们。