输入字符串或字符时应用程序崩溃

时间:2015-10-24 14:21:47

标签: ios xcode swift optional swift-playground

我是一名对自学有兴趣的高中生。我已经开始独立学习swift大约3个月了,这是我第一次做和学习如何编码。所以我想到了这个超级简单的应用程序理念,它只会将文本字段中提供的两个数字相乘,并且在按下按钮代替标签后显示结果。这是代码:

import UIKit

   class ViewController: UIViewController {


@IBOutlet var resultLabel: UILabel!


@IBOutlet var num1: UITextField!

@IBOutlet var num2: UITextField!


@IBAction func calculateButton(sender: UIButton) {

    let num1Entered: String? = num1.text
    let num2Entered: String? = num2.text

    var multiplyIt: Double? {

        return Double(num1Entered!)! * Double(num2Entered!)!

    }

    resultLabel.text = String(multiplyIt)

   }



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

  1. 变量resultLabel是一个标签,它在乘以时显示两个数字的结果。
  2. 变量" num1"和" num2"是用户输入数字的文本字段,然后乘以这些数字。
  3. 按钮" calculateButton"是按下按钮时带有乘法动作的按钮。
  4. 所以我的问题是,当我在模拟器中运行应用程序并放置一个字符或字符串时,应用程序崩溃了。我知道原因,因为我强行解开价值。我尝试使用&#34安全地打开它;如果让#34;,但我无法绕过它。

    所以有人可以帮助我,或者可以告诉我应该怎么做,对我已编写的代码进行一些修改。

2 个答案:

答案 0 :(得分:3)

问题是在此行中强制展开nil值:

return Double(num1Entered!)! * Double(num2Entered!)!

将其更改为:

return (Double(num1Entered ?? "") ?? 0) * (Double(num2Entered ?? "") ?? 0)

<强>更新

如果您想要自定义行为以防没有输入数字,请使用以下代码方案:

if let num1 = Double(num1Entered ?? ""), num2 = Double(num2Entered ?? "") {
    resultLabel.text = num1 * num 2
} else {
    resultLabel.text = "No valid number entered"
}

答案 1 :(得分:1)

您的标签值是字符串值,因此您应首先将字符串值转换为Double。然后你做乘法或一些算术功能,然后再次需要将它显示为文本,然后再将其转换为字符串,如下所示: -

@IBAction func calculateButton(sender: UIButton) {

 let num1Entered:Double = Double(num1.text)!
 let num2Entered:Double = Double(num2.text)!

 var multiplyIt: Double = num1Entered * num2Entered
 resultLabel.text = String(multiplyIt)

}