使用swift实现计算器功能

 更新时间:2022年01月26日 08:38:49   作者:魏武天下  
这篇文章主要为大家详细介绍了使用swift实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

关于计算器的实现在做之前想了几个方案。

首先是做一个输入功能,再以后缀表达式来进行计算,但是这个更适用于做一个科学计算器,在平日生活中的计算器需要一些便捷的计算效果。

所以实现这个计算器使用了将数字存入Label然后转化String为Int的方式。

算数符号可以存于一个数组内,以数组自带的编号来表示运算符,
程序内需要储存的数字可以简单的两个,但是只用两个数字以类似 sum1 += sum2的形式会有一些小BUG出现,所以中间加了一个过渡数字。

计算器里有三个布尔类型的值来分别判断:之前是否输入过等于号,这个数字是否是负数,以及是否输入过操作符号。(等于号的判断是为了查看过度数字应该取哪个值,是否输入过加减号可以让等于结果之后按数字就可以进入下一个运算。)

这个计算器可以实现一些比较简单的运算,运算符的优先级并未作出判定,但是还是很适用于生活中的运算。

这个计算机的小bug就是在每输入两个数字进行运算后必须按等于号,不能以a+b+c+…………的形式计算,只能用于a + b = ?

//
//  ViewController.swift
//  Calculator
//
//  Created by CQUPT-ZHX on 2019/4/27.
//  Copyright © 2019 cquptzhx. All rights reserved.
//

import UIKit
import Darwin

class ViewController: UIViewController {
   
    var Priority = ["+","-","*","÷","="]
    var isEq:Bool = false//判断是否输入等于号
    var isMinus:Bool = false//判断是否负数
    var isControl:Bool = false//判断是否输入操作符
    var input:Double = 0.0//存储输入数字
    var lastRes:Double = 0.0//存储过度数字
    var res:Double = 0.0//存储a答案
    var fh:Int = 0//符号tag
    var math:Int = 0//运算符tag
    
    @IBOutlet weak var resultsum: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    
    @IBAction func takesum(_ sender: UIButton) {
        //取数字
        if isMinus {//取负数后下次显示区清零
            resultsum.text = "0"
        }
        if isControl{//输入运算符后下次显示区清零
            resultsum.text = "0"
        }
        if(resultsum.text! != "0"){
            resultsum.text! += String(sender.tag)
        }else{
            resultsum.text! = String(sender.tag)
        }
        input = (resultsum.text! as NSString).doubleValue
        //获得数字并存储
        isEq = false
        isMinus = false
        isControl = false
    }
    @IBAction func touchPoint(_ sender: UIButton) {
        resultsum.text! += "."
        //加入小数点
    }
    @IBAction func touchMinus(_ sender: UIButton) {
        //负数操作
        if (res == 0){
            equal(sender)
            res = -input
        } else{
            res = -res
        }
        resultsum.text = String(res)
        isMinus = true
    }
    @IBAction func equal(_ sender: UIButton) {
        //等号运算
        switch(fh) {
            case 1:
                res = lastRes + input
            case 2:
                res = lastRes - input
            case 3:
                res = lastRes * input
            case 4:
                res = lastRes / input

            default:
                break
        }
        resultsum.text! = "\(res)"
        lastRes = res
        isEq = true
        isControl = true
    }
    @IBAction func backC(_ sender: UIButton) {
        //删除上一个字符
        if resultsum.text?.count == 1 {
            resultsum.text = "0"
        }
        else if (resultsum.text! as NSString).doubleValue != 0 {
            resultsum.text?.removeLast()
        }
        input = (resultsum.text! as NSString).doubleValue
    }
    
    @IBAction func getsign(_ sender: UIButton) {
        //输入运算符
        if sender.tag < 5 {
            resultsum.text! = Priority[sender.tag - 1]
            if isEq {
                lastRes = res
            }
            else {
                lastRes = input
            }
        }
        fh = sender.tag
        isControl = true
    }
    
    
    @IBAction func touchClean(_ sender: UIButton) {
        //清空所有储存
        res = 0
        lastRes = 0
        input = 0
        resultsum.text = "0"
        isControl = false
    }
    
    
    @IBAction func touchMath(_ sender: UIButton) {
        //便捷运算
        math = sender.tag
        if(res == 0){
            res = input
        }
        switch(math){
        case 7:
            res = res * 3.14
        case 8:
            res = res * res
        case 9:
            res = sin(res)
        case 10:
            res = cos(res)
        default:
            break
        }
        resultsum.text! = "\(res)"
         lastRes = res
        isEq = true
        
    }
    
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Swift运算符使用方法浅析

    Swift运算符使用方法浅析

    Swift 语言支持大部分标准 C 语言的运算符,并且改进了许多特性来使我们的代码更加规范,其中主要包含算数运算符、区间运算符、逻辑运算符、关系运算符、赋值运算符、自增自减运算符、溢出运算符等
    2022-09-09
  • Swift3迁移至Swift4可能遇到的问题小结

    Swift3迁移至Swift4可能遇到的问题小结

    每当看到新的编程语言我总是会有相当大的兴趣,所以下面这篇文章主要给大家介绍了关于Swift3迁移至Swift4可能遇到的问题,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起学习学习吧
    2018-06-06
  • Swift学习笔记之构造器重载

    Swift学习笔记之构造器重载

    Swift 将为所有属性已提供默认值的且自身没有定义任何构造器的结构体或基类,提供一个默认的构造器。这个默认构造器将简单的创建一个所有属性值都设置为默认值的实例。
    2014-11-11
  • switch实现一个两数的运算代码示例

    switch实现一个两数的运算代码示例

    这篇文章主要介绍了switch实现一个两数的运算代码示例,需要的朋友可以参考下
    2017-06-06
  • 分享十条实用的Swift小提示

    分享十条实用的Swift小提示

    是时候使用易入手又全面的Swif语言为iOS和mac OS X做应用开发了,下面这篇文章主要给大家分享介绍了十条实用的Swift小提示的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-06-06
  • Swift教程之下标详解

    Swift教程之下标详解

    这篇文章主要介绍了Swift教程之下标详解,本文讲解了下标语法、下标的使用、下标选项等内容,需要的朋友可以参考下
    2015-01-01
  • Swift中的类class与结构体struct体学习笔记

    Swift中的类class与结构体struct体学习笔记

    和C++一样,Swfit中同时拥有类与结构体,能够充分满足开发者面向对象和面向过程编程的需求,这里我们就来看一下Swift中的类class与结构体struct体学习笔记
    2016-07-07
  • Swift3.0 GCD定时器的使用DEMO

    Swift3.0 GCD定时器的使用DEMO

    这篇文章主要介绍了Swift3.0 GCD定时器的使用,实现倒计时,UIDatePicker的使用, 仿写一个活动倒计时的DEMO,需要的朋友可以参考下
    2017-02-02
  • Swift实现倒计时5秒功能

    Swift实现倒计时5秒功能

    这篇文章主要为大家详细介绍了Swift实现倒计时5秒功能,在“登录”和“注册”页面也有相似功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Swift能代替Objective-C吗?

    Swift能代替Objective-C吗?

    这是我在网上上看到的答案,复制粘贴过来和大家分享一下,因为我和很多人一样很关心Swift的出现对Mac开发的影响和对Objective-C的影响。
    2014-09-09

最新评论