无法让 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)
所以这是我的操作的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)