swift-計算器(斯坦福公開課)

看了斯坦福老頭的課,真心以爲,個人中文怎麼也變的這麼垃圾了。是關於iOS8的課程,用swift寫的,一個計算器應用的製做,看看人家的課,再看看我們學校的課(不過垃圾學校,純粹以爲大學浪費了),廢話啊,廢話,繼續廢話。那個老頭的代碼有些我給省略了,不知道會出現什麼問題,反正我是沒有發現,若是你發現了,請告訴我。還有就是這個計算器的具體操做步驟是,你先4-> 回車-> 5-> 回車 ->乘號 顯示計算結果20git

首先是界面的搭建,就是0-9一共10個按鈕,而後加減乘除四個操做按鍵,以及,一個回車鍵(用來將所輸入的數存放在棧中,反正老頭是這樣說的,他把輸入進去的數存放到了一個數組中了var operandStack = Array<Double>(),還有就是一個用來顯示輸入的數以及輸入結果的label了。這些都是在故事板中進行的(固然除了那個數組),而後將label與代碼關聯swift

@IBOutlet weak var resultLabel: UILabel!數組

//事實上,在這裏指明類型被認爲是很差的書寫方式,若是能夠推斷出類型 ,你就應該讓編譯器本身去推斷app

    //var isStart :Bool = false函數

    var isStart = false //用戶是否是已經輸入,那個老外用了一長串的字符userIsInTheMiddleOfTypingANumberorm

 

將0-9這10個數的點擊事件與代碼關聯事件

@IBAction func buttonTap(sender: UIButton) {ip

        let digit = sender.titleLabel?.text// 注意這個digit是一個可選值(opentional),就是你點擊的按鈕上的數字,rem

        if isStart{字符串

        resultLabel.text = resultLabel.text! + digit! //可選值是不能夠拼接字符串的,因此在這個地方,須要進行解包

        }else{

        resultLabel.text = digit//用戶第一次點(我這樣理解的),結果框顯示你按的那個數

        isStart = true//這個是說用戶已經開始輸入了

        }

    }

 

 

 var operandStack = Array<Double>()

    //這個變量是一個內部的棧,去存儲你輸入的這些數,他的類型是一個數組,這個數組裏存放的是Double的變量,注意在這個地方要初始化,(咱們不能使用沒有通過初始化的,會報錯)

    @IBAction func enter() {

        isStart = false //由於咱們在點完enter的時候,須要將剛纔輸入的數放到棧裏,而且輸第二個數,因此須要將這個布爾值設爲false

//        var value = (resultLabel.text! as NSString).doubleValue

        operandStack.append(resultValue)

        println("operandStack: \(operandStack)")

    }

    

    //計算型屬性

    var resultValue:Double{

        get{

        return NSNumberFormatter().numberFromString(resultLabel.text!)!.doubleValue

        }

         set{

        resultLabel.text = "\(newValue)" //newValue是系統的,就是想要設置的那個值       2將double類型轉換爲字符串

//            isStart = false// 這句話寫在這不知道是什麼意思,該怎麼理解呢

        }

    

    }

 

 

    @IBAction func operate(sender: UIButton) {

        let operation = sender.currentTitle!

        switch operation{

//            case "✖️" : performOperation { $1 * $2 }

            case "✖️": performOperation { $0 * $1} //這個地方,這地方真心坑,$0 * $1,我還覺得傳進入隨便兩個數就好了呢,那老頭對這段代碼不斷的簡化簡化,才寫成了這樣,明天把簡化的過程單獨整理出來(明日復明日啊)

            case "➗" : performOperation { $1 / $0 }

            case "➖" : performOperation { $1 - $0 }

            case "➕" : performOperation { $1 + $0 }

            

        default:break

            

        }

    

    }

    

    

    func performOperation(operation:(Double,Double)->Double){//函數的參數是一個函數

        if operandStack.count >= 2{

            resultValue = operation(operandStack.removeLast() , operandStack.removeLast())//operandStack.removeLast()難道說,這個方法刪除並返回了最後一個數?

        }

        

    }

    

//    func multipy(op1:Double,op2:Double)->Double{

//    

//        return op1 * op2

//    }

相關文章
相關標籤/搜索