看了斯坦福老頭的課,真心以爲,個人中文怎麼也變的這麼垃圾了。是關於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
// }