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