第一個swift程序 簡單的計算器

用Xcode簡單實現(xiàn)了計算器的功能。
平時沒有寫代碼(做設(shè)計),所以錯漏百出,代碼質(zhì)量不高。
另外很多東西只是知其然,不知其所以然。
一開始覺得很簡單,可是后來,比我想象的復(fù)雜很多,很多邏輯沒想清楚。還有就是對計算器的產(chǎn)品邏輯不了解,一些非正常的操作不熟悉。

總結(jié)

寫程序前必須做好準(zhǔn)備,理清思路,邏輯清晰,預(yù)想各種特殊情況。
體驗已有的產(chǎn)品,熟悉正常的產(chǎn)品邏輯,避免不合常理。
swift對變量的數(shù)據(jù)類型要求很嚴(yán)格。
switch語句處理optional,“ ! ”和“ ? ”沒有理解,optional拆包等等。
如果要改進(jìn)程序,還需要增加更多的變量,識別是否鍵入第二操作數(shù),是否鍵入小數(shù)點,把顯示和計算的數(shù)據(jù)類型分開,添加錯誤處理。

基本邏輯

鍵入按鈕分為五種:數(shù)字、符號、小數(shù)點、等號、清零

  1. 當(dāng)前鍵入的數(shù)字永遠(yuǎn)保存到后一個操作數(shù)里,當(dāng)鍵入符號和等號時,后一個操作數(shù)推入前一個操作數(shù),新鍵入的數(shù)字依然保存在后一個操作數(shù)里。
  2. 通過按鈕的文字,獲取當(dāng)前點擊的操作。
  3. 當(dāng)小數(shù)點激活時,每次鍵入數(shù)字小數(shù)點操作數(shù)乘以0.1,來改變當(dāng)前小數(shù)點位置。
  4. 鍵入符號,后一個操作數(shù)推入前一個操作數(shù)里,后一個操作數(shù)清零。
  5. 清零則全部清除,包括所有的操作數(shù)。

當(dāng)前程序問題

  1. 連續(xù)點擊等號,無法繼續(xù)計算
  2. 沒有錯誤處理,比如除數(shù)不能為零
  3. 整數(shù)的計算,數(shù)字帶了.0
  4. 分不清零和空(大問題,汗)

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    @IBOutlet weak var xianshi: UILabel!

    var qianyige:Double = 0
    var houyige:Double = 0
    var jieguo:Double = 0
    
    var point:Double = 0.0
    
    var fuhao:String?
    
    @IBAction func shuzi(sender: AnyObject) {
        if (point == 0.0) {
            switch sender.currentTitle! {
            case "1"?:
                houyige = 1 + houyige * 10
            case "2"?:
                houyige = 2 + houyige * 10
            case "3"?:
                houyige = 3 + houyige * 10
            case "4"?:
                houyige = 4 + houyige * 10
            case "5"?:
                houyige = 5 + houyige * 10
            case "6"?:
                houyige = 6 + houyige * 10
            case "7"?:
                houyige = 7 + houyige * 10
            case "8"?:
                houyige = 8 + houyige * 10
            case "9"?:
                houyige = 9 + houyige * 10
            case "0"?:
                houyige = houyige * 10
            default:
                print("shuzi")
            }
        } else if (point != 0.0) {
            switch sender.currentTitle! {
            case "1"?:
                houyige = (point * 1) + houyige
            case "2"?:
                houyige = (point * 2) + houyige
            case "3"?:
                houyige = (point * 3) + houyige
            case "4"?:
                houyige = (point * 4) + houyige
            case "5"?:
                houyige = (point * 5) + houyige
            case "6"?:
                houyige = (point * 6) + houyige
            case "7"?:
                houyige = (point * 6) + houyige
            case "8"?:
                houyige = (point * 6) + houyige
            case "9"?:
                houyige = (point * 6) + houyige
            case "0"?:
                point = point * 0.1
            default:
                print("shuzi")
            }
            point = point * 0.1
        }
        
        xianshi.text = String(houyige)
        
    }

    @IBAction func add(sender: AnyObject) {
        
        if houyige != 0 {
            qianyige = houyige
            houyige = 0
        }
        
        point = 0.0
        fuhao = sender.currentTitle
        
    }
    @IBAction func clear(sender: AnyObject) {
        qianyige = 0
        houyige = 0
        jieguo = 0
        point = 0.0
        xianshi.text = "0"
        
    }
    @IBAction func output(sender: AnyObject) {
        if (qianyige != 0) && (houyige != 0) && (fuhao != "") {
            switch fuhao! {
            case "加":
                jieguo = qianyige + houyige
            case "減":
                jieguo = qianyige - houyige
            case "乘":
                jieguo = qianyige * houyige
            case "除":
                jieguo = qianyige / houyige
            default:
                print("output")
            }
            xianshi.text = String(jieguo)
            
            fuhao = ""
            houyige = 0
            qianyige = jieguo
            point = 0.0
        }
        
    }

    @IBAction func point(sender: AnyObject) {
        if point == 0.0 {
            point = 0.1
        }
        
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容