ios 我如何在计算器应用程序中使用一次数字中的点

6fe3ivhb  于 2023-05-23  发布在  iOS
关注(0)|答案(1)|浏览(157)

我的计算器应用程序有问题(这是从课程中完成的)。应用程序完成,但在一天结束时,当我按下数字,然后点为小数点,并再次点应用程序崩溃。此外,当你按下数字前的点时,标签会从“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括号里。

ig9co6j1

ig9co6j11#

好吧,我找到解决办法了:
为了避免双点崩溃,我在@IBAction func numButtonPressed(_ sender: UIButton)中添加了一个if语句,以检查是否有一个点:

if isFinishedTypingNumber {

            if numValue == "." {
                displayLabel.text = "0."
            } else {
                displayLabel.text = numValue
            }
            
            isFinishedTypingNumber = false

为了避免第二次崩溃,我添加了if !isInt || displayLabel.text!.contains("."),谢谢@udi!

相关问题