【问题标题】:Calculator app does not get multiple-digit numbers and operations return zero at all times?计算器应用程序没有获得多位数字并且操作始终返回零?
【发布时间】:2017-11-09 10:36:38
【问题描述】:

我使用的是 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”。

【问题讨论】:

  • 你测试过什么计算?调用calculatoroperationButton的值是多少?
  • @Yannick 它始终为零,每当我按下任何功能按钮时,它都会将 resultTextField 设置为零。
  • print(operationButton)calculator() 函数中打印什么?
  • @Yannick 它打印操作字符串,例如“+”或“*”,当每个在模拟器中被按下时。

标签: swift xcode calculator operations


【解决方案1】:

您的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

【讨论】:

  • .flatMap 只接收字符,并且我的编译器错误说:无法使用类型为 '((Character))' 的参数列表调用类型为 'Int' 的初始化程序
  • 不幸的是它也不起作用。恐怕它太简单了,任何人都无法提及。
猜你喜欢
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多