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

Ios 当输入字符串或字符时,应用程序崩溃,ios,xcode,swift,optional,swift-playground,Ios,Xcode,Swift,Optional,Swift Playground,我是一名对自学感兴趣的高中生。我已经开始独立学习swift大约3个月了,这是我第一次做和学习如何编码。所以我想到了这个超级简单的应用程序想法,它只会将文本字段中提供的两个数字相乘,结果会在按下按钮代替标签后显示。以下是代码: import UIKit class ViewController: UIViewController { @IBOutlet var resultLabel: UILabel! @IBOutlet var num1: UITextField! @IBOu

我是一名对自学感兴趣的高中生。我已经开始独立学习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.
}
}

  • 变量resultLabel是一个标签,它在相乘时显示两个数字的结果
  • 变量“num1”和“num2”是文本字段,用户在其中输入数字,然后在其中相乘
  • 按钮“calculateButton”是一个按钮,一旦按下,就可以执行乘法操作
  • 所以我的问题是,当我在模拟器中运行应用程序并输入单个字符或字符串时,应用程序崩溃。我知道原因,因为我强制展开值。我试着用“如果让”安全地打开它,但我无法绕过它


    因此,有人可以帮助我,或者告诉我应该怎么做,对我已经编写的代码做一些小的更改。

    问题是在这行中强制展开零值:

    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"
    }
    

    此行中的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"
    }
    

    您的标签值是字符串值,所以您应该首先将字符串值转换为双精度值。然后进行乘法或一些算术运算,然后再次需要将其显示为文本,然后再次将其转换为字符串,如下所示:-

    @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)
    

    }

    您的标签值是字符串值,因此应首先将字符串值转换为双精度。然后进行乘法或一些算术运算,然后再次需要将其显示为文本,然后再次将其转换为字符串,如下所示:-

    @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)
    

    }

    它工作得很好,显示为0。但返回除值之外的可选值。像这样->可选(0.0),但我希望它在输入字符串等非双精度输入时打印字符串“not a valid number”或类似的内容。“不想要”可选(0.0)。它非常有效,显示0。但是返回一个可选值,除了值。像这样->可选(0.0),但我希望它在我输入字符串之类的非双精度输入时打印字符串“不是有效数字”或类似的内容。不想要”可选(0.0)。这不提供问题的答案。若要评论或要求作者澄清,请在他们的帖子下方留下评论。当然,我会改进我的答案:)这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。当然,我会改进我的答案:)