使用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
        
    }
    
}

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: