无法让 Swift 中的计算器应用程序获取超过一位数?

Can't make calculator app in Swift get more than one digit?

所以这是我的操作的class:

class Calculation {

var currentNumber: String = ""
var resultNumber = Int()
var operationInput = String()


func operationIdentifier() {

    if operationInput == "=" {
        resultNumber = Int(currentNumber)!
        print("\(resultNumber)")
    } else if operationInput == "+" {
        resultNumber += Int(currentNumber)!
        print("\(resultNumber)")
    } else if operationInput == "-" {
        resultNumber -= Int(currentNumber)!
        print("\(resultNumber)")
    } else if operationInput == "*" {
        resultNumber *= Int(currentNumber)!
        print("\(resultNumber)")
    } else if operationInput == "/" {
        resultNumber /= Int(currentNumber)!
        print("\(resultNumber)")
    } else {
        print("Operation does not exist.")
    }

    print("\(resultNumber)")
}

这是我获得此按钮以获取数字标题的地方:

@IBAction func numberPressed(_ sender: UIButton) {

    calculation.currentNumber = (sender.titleLabel?.text!)!
    calculation.currentNumber.append(<#T##other: String##String#>)
    //calculation.currentNumber.append((sender.titleLabel?.text)!) This is how I use it to append.
    calculation.operationIdentifier()
    resultTextField.text = "\(calculation.currentNumber)"

}

追加命令适用于代码部分所示的字符串,我用它来添加到前一个数字的末尾,结果始终是某个 Int 的两倍,例如:如果你按 5,它 returns55.

numberPressed 中,您从标签文本中设置 currentNumber,然后再次向其附加相同的值。它应该是这样的:

@IBAction func numberPressed(_ sender: UIButton) {

    guard let label = sender.titleLabel, let numberString = label.text else{
        return
    }

    calculation.currentNumber.append(numberString)

    print("currentNumber = \(calculation.currentNumber)")

}

另外,为什么在numberPressed中调用calculation.operationIdentifier()?这不会在 operatorPressed 方法中进行吗?

首先,您要覆盖此处的值:calculation.currentNumber = (sender.titleLabel?.text!)!。其次,您需要在按下后清除当前号码。

这是我给你的概念(你编辑的代码),你可以在 Playground 中尝试。

enum Operator: String {
    case plus = "+"
    case minus = "-"
    case multiply = "*"
    case divide = "/"
    case equal = "="

}

class Calculation {

    var currentNumber: String = ""
    var resultNumber = Int()
    var operationInput = String()

    func recalculate() {
        if resultNumber == 0 {
            resultNumber = Int(currentNumber) ?? 0
            return
        }

        guard let sign = Operator(rawValue: operationInput), let number = Int(currentNumber) else { return }

        switch sign {
            case .plus: resultNumber += number
            case .minus: resultNumber -= number
            case .divide: resultNumber /= number
            case .multiply: resultNumber *= number
            case .equal: resultNumber = number
        }
    }

    func operatorPressed(_ op: Operator) {
        recalculate()
        operationInput = op.rawValue
        currentNumber = ""

        print(resultNumber)
    }

    func numberPressed(_ number: String) {
        currentNumber.append(number)
    }
}

let c = Calculation()
c.numberPressed("5")
c.numberPressed("5")
c.operatorPressed(.plus)
c.numberPressed("5")
c.operatorPressed(.multiply)
c.numberPressed("5")
c.operatorPressed(.equal)
c.operatorPressed(.plus)
c.numberPressed("5")
c.operatorPressed(.equal)