swift 發表於 2018-8-14 17:21:41

用 swift 4.0 新寫的簡易計算機

本帖最後由 swift 於 2020-12-28 16:39 編輯

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

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

GlDbCo8618U


//

//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:38

最新版,增加幾個功能:

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



MaxS4988kXU


頁: [1]
查看完整版本: 用 swift 4.0 新寫的簡易計算機