#11 — 先乘除後加減和考慮負數的計算機 App

呈現畫面:

使用元件:

Button

Label

不得不說Auto Layout真的是一個相當有深度的課題,因為我光設計下圖的排版就花了2、3個小時,最後還請教了我朋友才搞定XD

計算機作法如下:

先把數字、運算符號做區分,分別拉到兩個Outlat Collection,由於全部Button都設定好是方形(除了AC、0的寬不一樣),所以利用layer.cornerRadius = 方形高的一半,搭配for迴圈in都改成圓型,由於這樣做完發現圓與圓之間會沒有距離,為了好看一點所以將每個Button再包一層View,並設定Button上下左右都與View相距Constant = 4。

override func viewDidLoad() {
super.viewDidLoad()
for numberOutlet in numberOutlets{
numberOutlet.layer.cornerRadius = numberOutlet.frame.height/2
numberOutlet.backgroundColor = .gray
numberOutlet.tintColor = .white
}
for operatorOutlet in operatorOutlets{
operatorOutlet.layer.cornerRadius = operatorOutlet.frame.height/2
operatorOutlet.backgroundColor = .orange
operatorOutlet.tintColor = .white
}
operatorOutlets[3].backgroundColor = .gray
view.backgroundColor = .black
resultLabel.text = "0"
resultLabel.adjustsFontSizeToFitWidth = true
}

將每個數字Button設Tag,Tag值為本身的數字號碼,按下數字時先判斷是不是輸入得第一位,如果不是再判斷第一位是否為0(布林值dialFirstDigit =true時代表為第一位)

加入小數點的Button(布林值decimals =true時代表為小數點)

點選AC清空所有設定

正負值Button設定

運算符號設定,比較特別是裡面先宣告一個doubleNum型別為字串的變數,當布林值decimals = false時,變數doubleNum = “.0”,給予字串.0的原因是方便做之後的運算,因為如果沒有加上.0的整數做計算時會無法顯示出小數點,而空字串equation是為了顯示最後完整的字串。

(加減乘除Button也都給予Tag)

點選完加減乘除時,布林值decimals =false、dialFirstDigit =true,再點選數字Button才會回到@IBAction func numberButton的設定重新顯示。

最後的等於Button是先將equation裡的字串加上後來新增的resultLabel.text字串全部利用NSExpression的expressionValue方法得到運算答案,得到的答案型別由Any轉型成Double,接者判斷除以1是否有餘數,就可分辨答案是有小數點還是整數,再把答案顯示在Label上。

(如果答案是有小數點,記得在最後加上decimals =true,如不加再將答案進行運算會閃退)

.floor以及.rounding是使用別人已經寫好的函式,用extension加入到Double的function中,只要是Double的東西就能使用,將值傳進去就能回傳一個處理好的值

參考資料:

GitHub網址:

--

--