我正在建立一个有两个字段的卡路里计数器: 一:输入每份卡路里。 二:输入份数。
还有一个“剩余的卡路里”。标签从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字段仍有值,为什么会出现此错误?
我对编程很陌生,我知道这是一个多次被问过的问题。我理解错误意味着什么,而不是它对我的代码意味着什么,所以我不知道从哪里开始修复它。
答案 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()在控制台上打印它们。