swift - 计算器应用程序无法获取多位数字并且运算始终返回零?

标签 swift xcode calculator operations

我使用的是 Swift 4,数字均为 Int 格式。

所以我制作了一个计算类文件:

import Foundation
import UIKit

class Calculation {

    var result = Int()
    var operationButton = String()
    var currentNumber = Int()

    func calculator() {

        switch operationButton {
        case "+":
            result = result + currentNumber
        case "-":
            result = result - currentNumber
        case "*":
            result = result * currentNumber
        case "/":
            result = result / currentNumber
        case "=":
            result = currentNumber
        default:
            break
        }

    }

        func textClear() {
            result = 0
            currentNumber = 0
            operationButton = "="
    }

然后我在 UIControllerView 中为 AC 按钮、数字按钮和操作按钮创建了 3 个函数,以直接从按钮标题获取“0-9”和“-,+,*,/,=”。

    class ViewController: UIViewController {


    @IBOutlet weak var resultTextField: UITextField!

    var calculation = Calculation()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        calculation.operationButton = "="
        resultTextField.text = "\(calculation.result)"
    }


    @IBAction func allClearButtonPressed(_ sender: UIButton) {
        calculation.textClear()
        resultTextField.text = "\(calculation.result)"
    }

    @IBAction func operationButtonPressed(_ sender: UIButton) {

        calculation.operationButton = sender.titleLabel!.text as String!
            calculation.operationButton = sender.titleLabel!.text!
        calculation.calculator()
        resultTextField.text = "\(calculation.result)"
    }

    @IBAction func numberButtonPressed(_ sender: UIButton) {

        calculation.currentNumber = Int((sender.titleLabel?.text)!)!
        let numberInput = String(calculation.currentNumber)
        resultTextField.text = numberInput
    }
}

第一个问题是,每当我尝试输入一个数字(例如 21)时,它只会返回 2,然后替换为 1。第二个问题是运算符总是向“resultTextField”返回零。

最佳答案

您的numberButtonPressed函数读取按钮的文本,替换currentNumber,然后将其分配给resultTextField.text。您想要的是一个将新数字添加到当前号码的功能。在您的 Calculator 类中。

func pressedDigit(_ digit: Int) {
    currentNumber = currentNumber * 10 + digit
}

然后您可以调用此函数并将 currentNumber 分配给您的 resultTextField

@IBAction func numberButtonPressed(_ sender: UIButton) {
    guard let digit = sender.titleLabel?.text?.flatMap({ Int(String($0)) }) else { return }
    calculation.pressedDigit(value: digit)
    resultTextField.text = "\(calculation.currentNumber)"
}

每次计算后,您还必须重置currentNumber

关于swift - 计算器应用程序无法获取多位数字并且运算始终返回零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47199627/

相关文章:

ios - 使用约束重新定义协议(protocol)功能,而无需公开方法

ios - 如何从一个 viewController 添加多个 Segue

swift - 导航栏渐变背景图像在不同的模拟器设备上不统一?

unicode - Google 计算器中的特殊字符

java - 需要简单的 Java 计算器帮助

c++ - 解析计算器的这段代码有什么问题?

ios - 未检索到 Swift 沙箱测试产品

ios - 在Swift中以编程方式注销Facebook应用

ios - 触摸在 UIButton Action 中的位置

IOS 模拟器与 Mavericks 速度较慢