千家信息网

iOS实现计算器小功能的代码怎么写

发表于:2024-12-03 作者:千家信息网编辑
千家信息网最后更新 2024年12月03日,本篇内容介绍了"iOS实现计算器小功能的代码怎么写"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文
千家信息网最后更新 2024年12月03日iOS实现计算器小功能的代码怎么写

本篇内容介绍了"iOS实现计算器小功能的代码怎么写"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本文利用ios实现计算器app,后期将用mvc结构重构

import UIKitclass CalculViewController: UIViewController {    @IBOutlet weak var display: UILabel!    var userIsInTheMiddleOFTypingANumber:Bool=false    @IBAction func appendDigit(sender: UIButton) {        let digit=sender.currentTitle!        if userIsInTheMiddleOFTypingANumber {        display.text=display.text!+digit        }else{            display.text=digit            userIsInTheMiddleOFTypingANumber=true        }    }    var operandstack:Array=Array()    @IBAction func operate(sender: UIButton) {        let operation=sender.currentTitle!;        if userIsInTheMiddleOFTypingANumber {            enter()        }        switch operation {        case "×":performeOperation{$0*$1}        case "÷":performeOperation{$1/$0}        case "+":performeOperation{$0+$1}        case "-":performeOperation{$1-$0}        case "√":performeOperation{sqrt($0)}        default:            break        }    }//    func multiply(op1:Double,op2:Double) -> Double {//        return op1*op2;//    }    func performeOperation(operation:(Double,Double)->Double){        if operandstack.count>=2 {            displayValue=operation(operandstack.removeLast(),operandstack.removeLast())            enter()        }    }     private func performeOperation(operation:Double->Double){        if operandstack.count>=1 {            displayValue=operation(operandstack.removeLast())            enter()        }    }    @IBAction func enter() {        userIsInTheMiddleOFTypingANumber=false        operandstack.append(displayValue)        print("operandstack=\(operandstack)")    }    var displayValue:Double{        get{            return NSNumberFormatter().numberFromString(display.text!)!.doubleValue        }        set{            display.text="\(newValue)"            userIsInTheMiddleOFTypingANumber=false        }    }

知识点如下

计算型属性的setter与getter
swift利用函数作为参数
swift的重载,详情参见:swift override

效果如下

增加model文件

import Foundationclass CalculatorBrain {    private enum Op : CustomStringConvertible{        case operand(Double)        case UnaryOperation(String,Double->Double)        case BinaryOperation(String,(Double,Double)->Double)        var description:String{            get{                switch self {                case .operand(let operand):                    return "\(operand)"                case .BinaryOperation(let symbol,_):                    return symbol                case .UnaryOperation(let symbol, _):                    return symbol                }            }        }    }    private var opstack=[Op]()    private var knowOps=[String:Op]()    init(){        func learnOp(op:Op){            knowOps[op.description]=op        }        learnOp(Op.BinaryOperation("×"){$0*$1})        learnOp(Op.BinaryOperation("÷"){$1/$0})        learnOp(Op.BinaryOperation("+"){$0+$1})        learnOp(Op.BinaryOperation("-"){$1-$0})        learnOp(Op.UnaryOperation("√"){sqrt($0)})//        knowOps["×"]=Op.BinaryOperation("×"){$0*$1}//        knowOps["÷"]=Op.BinaryOperation("÷"){$1/$0}//        knowOps["+"]=Op.BinaryOperation("+"){$0+$1}//        knowOps["-"]=Op.BinaryOperation("-"){$1-$0}//        knowOps["√"]=Op.UnaryOperation("√"){sqrt($0)}    }    private func evaluate(ops:[Op])->(result:Double?,remainOps:[Op]){        if !ops.isEmpty {            var remainOps=ops;            let op=remainOps.removeLast()            switch op {            case Op.operand(let operand):                return(operand,remainOps)            case Op.UnaryOperation(_, let operation):                let operandEvalution=evaluate(remainOps)                if let operand=operandEvalution.result{                    return(operation(operand),operandEvalution.remainOps)                }            case Op.BinaryOperation(_, let operation):                let operandEvlution1=evaluate(remainOps)                if let operand1=operandEvlution1.result {                    let operandEvlution2=evaluate(operandEvlution1.remainOps)                    if let operand2=operandEvlution2.result {                        return (operation(operand1,operand2),operandEvlution2.remainOps)                    }                }            }        }        return (nil,ops)    }    func evaluate()->Double?{        let (result,remainder)=evaluate(opstack)        print("\(opstack)=\(result)with\(remainder)left over")        return result    }    func pushOperand(operand:Double)->Double?{        opstack.append(Op.operand(operand))        return evaluate()    }    func performOperation(symbol:String)->Double?{        if let operation=knowOps[symbol]{            opstack.append(operation)        }        return evaluate()    }}

controll修改为

import UIKitclass CalculViewController: UIViewController {    @IBOutlet weak var display: UILabel!    var userIsInTheMiddleOFTypingANumber:Bool=false    var brain=CalculatorBrain()    @IBAction func appendDigit(sender: UIButton) {        let digit=sender.currentTitle!        if userIsInTheMiddleOFTypingANumber {        display.text=display.text!+digit        }else{            display.text=digit            userIsInTheMiddleOFTypingANumber=true        }    }    //var operandstack:Array=Array()    @IBAction func operate(sender: UIButton) {        if userIsInTheMiddleOFTypingANumber {            enter()        }        if let operation=sender.currentTitle{            if let result=brain.performOperation(operation) {                displayValue=result            }else{                displayValue=0            }        }    }    @IBAction func enter() {        userIsInTheMiddleOFTypingANumber=false        if let result=brain.pushOperand(displayValue){            displayValue=result        }else{            displayValue=0        }    }    var displayValue:Double{        get{            return NSNumberFormatter().numberFromString(display.text!)!.doubleValue        }        set{            display.text="\(newValue)"            userIsInTheMiddleOFTypingANumber=false        }    }}

"iOS实现计算器小功能的代码怎么写"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

计算器 知识 代码 功能 内容 更多 实用 学有所成 接下来 函数 参数 困境 实际 属性 情况 效果 文件 文章 案例 知识点 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 马来西亚网络安全归什么部门管 服务器直配一颗cpu 江苏跨贸网络技术 可靠的网站服务器 根据用户判断用哪个数据库 数据库语言熟练程度怎么判断 山西数据库安全箱代理商 实况数据库鲁梅尼格2021 网络安全手抄报油画棒 优优互联网络科技有限公司 天津众齐软件开发有限公司 科技金融互联网征信体系构建 国产互联网科技股票 贵州运营网络技术服务代理商 网页客户端无法连接到网关服务器 服务器什么时候能更新 数据库工程师是属于什么部门 html5 数据库查询 海南泓杰网络技术有限公司 轻量服务器是什么类型 软件开发合同逾期扣款标准 登录注册页面如何连接数据库 江西村游网络技术 服务器机房配中间件 网络技术专业考研科目 群晖连不上pt服务器 不属于网络数据库 以色列网络安全公司a 广西大学思科网络技术学院 招远商城软件开发企业
0