第二个变量取第一个值

Second variable takes the firsts value

我构建了一个二进制计算器应用程序,对于数字我有两个变量。 previousNumber 和 numberOnScreen。这个想法是将二进制数转换为十进制数,进行计算并将答案转换回来。

假设我选择的第一个 (previousNumber) 号码是 1010,第二个 (numberOnScreen) 10100

var numberOnScreen:Int = 0;
var previousNumber:Int = 0;
var doingMath = false
var operation = 0;
var decimal = 0;
var decimal1 = 0;
var binary:String = ""
var binary1:String = ""

@IBOutlet weak var label: UILabel!

@IBAction func Numbers(_ sender: UIButton) {
    if doingMath == true
    {
        label.text = String(sender.tag-1)
        numberOnScreen = Int(label.text!)!
        doingMath = false
    }
    else
    {
        label.text = label.text! + String(sender.tag-1)
        numberOnScreen = Int(label.text!)!
    }
}

@IBAction func buttons(_ sender: UIButton) {

    if label.text != "" && sender.tag != 6 && sender.tag != 8
    {
        previousNumber = Int(label.text!)!
        binary = "\(previousNumber)"
        decimal = Int(binary, radix: 2)!
        binary1 = "\(numberOnScreen)"
        decimal1 = Int(binary1, radix: 2)!

        operation = sender.tag
        doingMath = true;
    }
    else if sender.tag == 8
    {
        if operation == 3 //adding
        {
            print(previousNumber, numberOnScreen, decimal, decimal1)

它打印 [ 1010, 10100, 10, 10 }

知道为什么会这样吗?

当您按下 = 键时,您需要更新 decimal1 的计算。将该代码移动到您正在处理的地方 =:

@IBAction func buttons(_ sender: UIButton) {

    if label.text != "" && sender.tag != 6 && sender.tag != 8
    {
        previousNumber = Int(label.text!)!
        binary = "\(previousNumber)"
        decimal = Int(binary, radix: 2)!

        operation = sender.tag
        doingMath = true;
    }
    else if sender.tag == 8
    {
        binary1 = "\(numberOnScreen)"
        decimal1 = Int(binary1, radix: 2)!

        if operation == 3 //adding
        {
            print(previousNumber, numberOnScreen, decimal, decimal1)

此外,我建议您去掉代码中的 幻数 并用常量替换它们。对于您的关键标签,您可以定义这样的结构:

struct Key {
    static let clear = 6
    static let equals = 8
    static let plus = 3
}

然后您的代码将显示为:

if label.text != "" && sender.tag != Key.clear && sender.tag != Key.equals {

这样就清楚多了