首页 > 解决方案 > 用 Swift 制作计算器

问题描述

我的问题是我可以单击并为我的第一个值输入多个数字,但是在我使用数学运算符(例如 +、-、*、/)之后,它只允许我输入一个值,这与第一次运行它不同。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var Label: UILabel!
    var secondNumber: Double = 0;
    var firstNumber: Double = 0;
    var performingMath = false
    var operatorUsed = 0;


    @IBAction func cleartext(_ sender: UIButton) {
        Label.text = ""
        performingMath = false
    }

    @IBAction func Numbers(_ sender: UIButton) {
        if performingMath {
            Label.text = String(sender.tag - 1)
            secondNumber = Double(Label.text!)!
            performingMath = true
        } else {
            Label.text = Label.text! + String(sender.tag - 1)
            secondNumber = Double(Label.text!)!
        }
    }

    @IBAction func Operators(_ sender: UIButton) {
        if Label.text != " " && sender.tag != 11 {
            firstNumber = Double(Label.text!)!

            if sender.tag == 12 {
                Label.text = "+"
            } else if sender.tag == 13 {
                Label.text = "-"
            } else if sender.tag == 14 {
                Label.text = "*"
            } else if sender.tag == 15 {
                Label.text = "/"
            }
            operatorUsed = sender.tag
            performingMath = true
        } else if sender.tag == 11 {
            if operatorUsed == 12 {
                Label.text = String(firstNumber + secondNumber)
            } 
            if operatorUsed == 13 {
                Label.text = String(firstNumber - secondNumber)
            }
            if operatorUsed == 14 {
                Label.text = String(firstNumber * secondNumber)
            }
            if operatorUsed == 15 {
               Label.text = String(firstNumber / secondNumber)
            }
        }
    }
}

我希望在使用数学运算符后可以输入尽可能多的值(例如 +-*/)

标签: iosswiftcalculator

解决方案


当您在 is 时更新标签的文本时performingMathtrue您只需分配新值而不是将值添加到现有值(参见第 3 行)

@IBAction func Numbers(_ sender: UIButton) {
    if performingMath {
        Label.text = String(sender.tag - 1) // !! HERE !!
        secondNumber = Double(Label.text!)!
        performingMath = true
    } else {
        Label.text = Label.text! + String(sender.tag - 1)
        secondNumber = Double(Label.text!)!
    }
}

performingMath这应该执行与 when is相同的操作false,因此您只需使用以下内容更新此行:

Label.text = Label.text! + String(sender.tag - 1)

推荐阅读