code.club

標題: 用 swift 4.0 新寫的簡易計算機 [打印本頁]

作者: swift    時間: 2018-8-14 17:21
標題: 用 swift 4.0 新寫的簡易計算機
本帖最後由 swift 於 2020-12-28 16:39 編輯

這次的特點有幾個:
一,有autolayout,所以會自動配合裝置大小不同來顯示,直放橫放都可以。
二,多了 back 功能,輸入之後可以逐一刪除掉。
三,1.005 - 1.004 會得到預想中的 0.001 ,而不是 0.00099999....。

致命的 bug 尚未發現,但功能上不盡如人意,和原本想要的有些不足之處。

[youtube]GlDbCo8618U[/youtube]


//

//  ViewController.swift

//  newTest0

//

//  Created by 孫英奇 on 2018/8/12.

//  Copyright © 2018年 孫英奇. All rights reserved.

//



import UIKit



class ViewController: UIViewController {

    var tempSum:String = "0"

   

    var newMath = 0

    var oldMath = 0

    var isCalc = false //看之前是否已有一次計算行為

    var isSigned = false

    @IBAction func clearAll(_ sender: UIButton) {

        mainWindow.text! = "0"

        dotOK.isEnabled = true

    }

   

    @IBAction func math(_ sender: UIButton) {

        tempSum = mainWindow.text!

        oldMath = newMath

        isCalc = true

        //將目前按鍵給予不同判斷值

        if sender.currentTitle! == "+"

        {

            newMath = 1

        } else if sender.currentTitle! == "-" {

            newMath = 2

        } else if sender.currentTitle! == "*" {

            newMath = 3

        } else if sender.currentTitle! == "/" {

            newMath = 4

        } else {

            newMath = 0

        }

        

        switch (oldMath) {

        case 1:

            mainWindow.text! = "\(Decimal(string : mainWindow.text!)! + Decimal(string:tempSum)!)"

        case 2: mainWindow.text! = "\(Decimal(string:tempSum)! - Decimal(string : mainWindow.text!)!)"

        case 3: mainWindow.text! = "\(Decimal(string:tempSum)! * Decimal(string : mainWindow.text!)!)"

        case 4: mainWindow.text! = "\(Decimal(string:tempSum)! / Decimal(string : mainWindow.text!)!)"

        default:

            tempSum = mainWindow.text!

        }

        

    }

   

   

   

   

   

    @IBOutlet weak var dotOK: UIButton!//"."的功能是否可用的旗標

    @IBOutlet weak var mainWindow: UILabel!//主視窗內容

   

    @IBAction func signed(_ sender: UIButton) {

        if isSigned == false {

            isSigned = true

            mainWindow.text! = "-" + mainWindow.text!

        } else {

            isSigned = false

            mainWindow.text!.removeFirst()

        }

    }

   

   

   

   

    //數字鍵包含.的功能

    @IBAction func numButton(_ sender: UIButton) {

        

        if mainWindow.text! == "0" {

            if sender.currentTitle! == "0" {

                mainWindow.text! = "0"

            } else if sender.currentTitle! == "." {

                mainWindow.text! = "0."

                dotOK.isEnabled = false

            } else {

                mainWindow.text! = sender.currentTitle! }

        }

        else {

            if sender.currentTitle! == "." && dotOK.isEnabled {

                mainWindow.text! += "."

                dotOK.isEnabled = false

            } else {

                mainWindow.text! += sender.currentTitle!}

        }

        

    }

    //回刪鍵的功能

    @IBAction func backspace(_ sender: UIButton) {

        

        if mainWindow.text!.count > 1 {

            mainWindow.text!.removeLast()

            

        } else if mainWindow.text!.count == 1 {

            mainWindow.text! = "0"

        }

        isDotOK()

      

    }

   

    //如果mainWindow.text!中不含"."的話,isDot立即恢復功能。

    func isDotOK(){

        if mainWindow.text!.contains(".") {

            dotOK.isEnabled = false

        } else {

            dotOK.isEnabled = true

        }

    }

   

   

   

   

    override func viewDidLoad() {

        super.viewDidLoad()

        print("newTest0")

    }

   

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        

        

    }

   

   

}
作者: swift    時間: 2018-8-18 09:14
最新版,增加幾個功能:

數字鍵和計算鍵有音效。除以0時會報錯也有錯誤音效。
小數點後最多12位。
會隨著視窗內數字長短調整字體大小,以容納比較大的數字。
按完數字之後可以按 back 鍵倒回去刪除,刪到0為止。
直接按小數點會自動在前面補 0 變成 0. 。
可以按正負號。
1.005 - 1.004 會得 0.001 ,而不會出現 0.0099999....的數字。



[youtube]MaxS4988kXU[/youtube]







歡迎光臨 code.club (https://code.club/) Powered by Discuz! X3.2