使用swift實現(xiàn)計算器功能
關(guān)于計算器的實現(xiàn)在做之前想了幾個方案。
首先是做一個輸入功能,再以后綴表達(dá)式來進(jìn)行計算,但是這個更適用于做一個科學(xué)計算器,在平日生活中的計算器需要一些便捷的計算效果。
所以實現(xiàn)這個計算器使用了將數(shù)字存入Label然后轉(zhuǎn)化String為Int的方式。
算數(shù)符號可以存于一個數(shù)組內(nèi),以數(shù)組自帶的編號來表示運(yùn)算符,
程序內(nèi)需要儲存的數(shù)字可以簡單的兩個,但是只用兩個數(shù)字以類似 sum1 += sum2的形式會有一些小BUG出現(xiàn),所以中間加了一個過渡數(shù)字。
計算器里有三個布爾類型的值來分別判斷:之前是否輸入過等于號,這個數(shù)字是否是負(fù)數(shù),以及是否輸入過操作符號。(等于號的判斷是為了查看過度數(shù)字應(yīng)該取哪個值,是否輸入過加減號可以讓等于結(jié)果之后按數(shù)字就可以進(jìn)入下一個運(yùn)算。)
這個計算器可以實現(xiàn)一些比較簡單的運(yùn)算,運(yùn)算符的優(yōu)先級并未作出判定,但是還是很適用于生活中的運(yùn)算。
這個計算機(jī)的小bug就是在每輸入兩個數(shù)字進(jìn)行運(yùn)算后必須按等于號,不能以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//判斷是否負(fù)數(shù) ? ? var isControl:Bool = false//判斷是否輸入操作符 ? ? var input:Double = 0.0//存儲輸入數(shù)字 ? ? var lastRes:Double = 0.0//存儲過度數(shù)字 ? ? var res:Double = 0.0//存儲a答案 ? ? var fh:Int = 0//符號tag ? ? var math:Int = 0//運(yùn)算符tag ? ?? ? ? @IBOutlet weak var resultsum: UILabel! ? ? override func viewDidLoad() { ? ? ? ? super.viewDidLoad() ? ? ? ? // Do any additional setup after loading the view. ? ? } ? ?? ? ? @IBAction func takesum(_ sender: UIButton) { ? ? ? ? //取數(shù)字 ? ? ? ? if isMinus {//取負(fù)數(shù)后下次顯示區(qū)清零 ? ? ? ? ? ? resultsum.text = "0" ? ? ? ? } ? ? ? ? if isControl{//輸入運(yùn)算符后下次顯示區(qū)清零 ? ? ? ? ? ? resultsum.text = "0" ? ? ? ? } ? ? ? ? if(resultsum.text! != "0"){ ? ? ? ? ? ? resultsum.text! += String(sender.tag) ? ? ? ? }else{ ? ? ? ? ? ? resultsum.text! = String(sender.tag) ? ? ? ? } ? ? ? ? input = (resultsum.text! as NSString).doubleValue ? ? ? ? //獲得數(shù)字并存儲 ? ? ? ? isEq = false ? ? ? ? isMinus = false ? ? ? ? isControl = false ? ? } ? ? @IBAction func touchPoint(_ sender: UIButton) { ? ? ? ? resultsum.text! += "." ? ? ? ? //加入小數(shù)點 ? ? } ? ? @IBAction func touchMinus(_ sender: UIButton) { ? ? ? ? //負(fù)數(shù)操作 ? ? ? ? if (res == 0){ ? ? ? ? ? ? equal(sender) ? ? ? ? ? ? res = -input ? ? ? ? } else{ ? ? ? ? ? ? res = -res ? ? ? ? } ? ? ? ? resultsum.text = String(res) ? ? ? ? isMinus = true ? ? } ? ? @IBAction func equal(_ sender: UIButton) { ? ? ? ? //等號運(yùn)算 ? ? ? ? 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) { ? ? ? ? //輸入運(yùn)算符 ? ? ? ? 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) { ? ? ? ? //便捷運(yùn)算 ? ? ? ? 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 ? ? ? ?? ? ? } ? ?? }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Swift map和filter函數(shù)原型基礎(chǔ)示例
這篇文章主要為大家介紹了Swift map和filter函數(shù)原型基礎(chǔ)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07swiftui開發(fā)之padding默認(rèn)值設(shè)置詳解
這篇文章主要為大家介紹了swiftui開發(fā)之padding默認(rèn)值設(shè)置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Swift自動調(diào)整視圖布局AutoLayout和AutoresizingMask功能詳解
這篇文章主要為大家介紹了Swift自動調(diào)整視圖布局AutoLayout和AutoresizingMask功能及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Swift 3.0基礎(chǔ)學(xué)習(xí)之類與結(jié)構(gòu)體
最近在學(xué)swift 3.0,主要看的是蘋果的官方文檔,這里只是根據(jù)自己看官方文檔的理解所做的一些記錄,不是完整的翻譯,希望也對你有所幫助。下面這篇文章主要介紹了Swift 3.0基礎(chǔ)學(xué)習(xí)之類與結(jié)構(gòu)體的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03