Ios 当输入字符串或字符时,应用程序崩溃
我是一名对自学感兴趣的高中生。我已经开始独立学习swift大约3个月了,这是我第一次做和学习如何编码。所以我想到了这个超级简单的应用程序想法,它只会将文本字段中提供的两个数字相乘,结果会在按下按钮代替标签后显示。以下是代码: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
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.
}
}
因此,有人可以帮助我,或者告诉我应该怎么做,对我已经编写的代码做一些小的更改。问题是在这行中强制展开零值:
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)。这不提供问题的答案。若要评论或要求作者澄清,请在他们的帖子下方留下评论。当然,我会改进我的答案:)这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。当然,我会改进我的答案:)