使用xcode创建项目Calculator

然后点开Main.storyboard,在右边最下面拖个Label进画板里面
storyboard就是故事版

然后点击右上角的‘show assistant editor’按钮,即可看到代码编辑页面

ios的算法 ios开发计算器_ios的算法

如果觉得空间很拥挤,可以把左边和右边的视图隐藏掉

ios的算法 ios开发计算器_swift_02

现在来看ViewController.swift

xcode已为我们生成了部分代码,代码如下,

ios的算法 ios开发计算器_控件_03

里面的部分代码暂时用不上,这里把他们去掉

ios的算法 ios开发计算器_swift_04

点击Main.Storyboard里面lable控件,按住ctrl键并拖动鼠标到右边的ViewController.swift ,输入Name的值,我这里填了 lb1,再点击‘connect’按钮。
这个过程叫做’连接’:故事版的控件连接到代码块形成关联。

ios的算法 ios开发计算器_ios的算法_05

ios的算法 ios开发计算器_ios的算法_06

可以把鼠标放在变量左边的小圆点查看连接的是哪个控件

ios的算法 ios开发计算器_控件_07

再拖到一个Button控件到故事版,显示值改为7,按住ctrl键拖动鼠标到ViewController.swift,
我们这次 把Connection的选项选择Action ,type选择UIButton,Name设为append7,点击connect按钮完成

ios的算法 ios开发计算器_swift_08

这里的设置的连接,不能简单地通过删除ViewController.swift的代码来完成,必须在控件的连接面板里面删除掉

ios的算法 ios开发计算器_swift_09

在故事版里面使用快捷键command+c ,command+v 来复制粘贴 多个label7,再修改其title为0到9,如图所示

ios的算法 ios开发计算器_控件_10

然后编辑append7的代码块

ios的算法 ios开发计算器_故事版_11

ios的算法 ios开发计算器_故事版_12

ios的算法 ios开发计算器_ios的算法_13

点击模拟器上的数字按钮,即可看到调试面板的输出信息

ios的算法 ios开发计算器_控件_14

拖动修改控件lb1的长度,并把text值改成空

ios的算法 ios开发计算器_故事版_15

ios的算法 ios开发计算器_故事版_16

修改代码块

ios的算法 ios开发计算器_控件_17

在故事版里面加入回车键

特殊符号的方法:在xcode->Edit->Emoji & Symbols

ios的算法 ios开发计算器_故事版_18

由于故事版上面的回车键是复制其他键来的,所以这个回车键也连接了append7

这个action,所以这里需要解除连接。

可以在回车键点击右键,会弹出所有的事件的连接,这需要点击一下右边的x按钮即可删除连接;

修改代码实现概念,点击一连串数字按键以回车键结束,串成一个数字并加入到double型数组中

ios的算法 ios开发计算器_ios的算法_19

再往故事版加入加减乘除运算符按键

ios的算法 ios开发计算器_ios的算法_20

ios的算法 ios开发计算器_控件_21

至此加减乘除按键连接了相同的事件operate,添加代码

ios的算法 ios开发计算器_故事版_22

依次按下:6,回车,9,回车,加号 即可看到15

ios的算法 ios开发计算器_ios的算法_23

完整代码

//
//  ViewController.swift
//  Calculator
//
//

import UIKit

class ViewController: UIViewController {

    
    @IBOutlet weak var lb1: UILabel!
    
    var hasNumber:Bool = false
    
    
    @IBAction func append7(_ sender: UIButton) {
        let title = sender.currentTitle!
        if(hasNumber){
            lb1.text = lb1.text! + title
        }else{
            lb1.text = title
            hasNumber = true
        }
        
    }
    @IBAction func operate(_ sender: UIButton) {
        let operate = sender.currentTitle
        if hasNumber{
            enter()
        }
        switch operate{
            case "+":preforeOperation{$0 + $1}
            case "−":preforeOperation{$0 - $1}
            case "x":preforeOperation{$0 * $1}
            case "÷":preforeOperation{$0 / $1}
            default:break
        }
        
    }
    
    func preforeOperation(operation:(Double,Double)->Double){
        if(operaStack.count >= 2){
            displayValue = operation(operaStack.removeLast(),operaStack.removeLast())
            enter()
            
        }
    }

    
    var operaStack = Array<Double>()
    @IBAction func enter() {
        hasNumber = false
        operaStack.append(displayValue)
        print("operaStack = \(operaStack)")
        
    }
    
    var displayValue:Double{
        get{
            return (lb1.text! as NSString).doubleValue
        }
        set{
            lb1.text = "\(newValue)"
            hasNumber = false
        }
    }
}