我的计算器应用程序有问题(这是从课程中完成的)。应用程序完成,但在一天结束时,当我按下数字,然后点为小数点,并再次点应用程序崩溃。此外,当你按下数字前的点时,标签会从“0”变成“.”,当你再次尝试时,应用程序也会崩溃。下面是出现问题的代码:
@IBOutlet weak var displayLabel: UILabel!
private var calculator = CalculatorLogic()
private var isFinishedTypingNumber: Bool = true
private var displayValue: Double {
get {
guard let number = Double(displayLabel.text!) else {
fatalError("Cannot convert display label text to a Double")
}
return number
}
set {
displayLabel.text = String(newValue)
}
}
这是一段计算代码:
@IBAction func numButtonPressed(_ sender: UIButton) {
//What should happen when a number is entered into the keypad
if let numValue = sender.currentTitle {
if isFinishedTypingNumber {
displayLabel.text = numValue
isFinishedTypingNumber = false
} else {
if numValue == "." {
let isInt = floor(displayValue) == displayValue
if !isInt {
return
}
}
displayLabel.text = displayLabel.text! + numValue
}
}
}
总结如下:每当我按下第二个点时就会出现问题,它很好,比如“1.23”等,当它像“..”或“1.2”时就会崩溃。
它在fatalError所在的地方崩溃,我知道我需要在那里做一些改变,我试图用'if let'来做'guard let',但它没有像我预期的那样工作:如果let想让我返回一个Double,我不能这样做。我也不能把if语句加到else括号里。
1条答案
按热度按时间ig9co6j11#
好吧,我找到解决办法了:
为了避免双点崩溃,我在
@IBAction func numButtonPressed(_ sender: UIButton)
中添加了一个if语句,以检查是否有一个点:为了避免第二次崩溃,我添加了
if !isInt || displayLabel.text!.contains(".")
,谢谢@udi!