optional 後,試做iPad沒提供的四則運算功能…iOS版
--
這個練習對於自己是有點非常困難,但畢竟是被號稱擁有20年開發經驗年薪破百*2 的小朋友,再怎樣硬著頭皮也要搞出個加減乘除。
基本型計算機的功能我區分成3類功能,1.數字與小數點,2.清除鍵、正負轉換與百分比,3.除乘減加和等於。
數字的功能要考慮的比較單純,主要就是把所按的數字顯示,這邊是透過 view的tag藉由 IBAction 傳送 sender.tag 即可取到值,至於小數點就是判斷Label裡有出現的話,就不要出現了,這個問題在課堂和小王子情哥四目相交幾次後就解了。
//如果有.就不要再加.
if !LabelLed.text!.contains(".") {LabelLed.text!.append(".")}
清除鍵、正負轉換與百分比相對的又比較簡單,反正就是把 Label清掉或是將已鍵入的值正負轉換與求得百分比。
//將Label裡的 - 取代成空字串
labelLedText.replacingOccurrences(of: "-", with: "")//百分比的運算,除100太複雜了,所以把程式貼上來
if let labelLedText = LabelLed.text ,let labelLedDouble = Double(labelLedText) {
LabelLed.text = String(labelLedDouble/100)
}
再來就是比較困擾我智商的除乘減加和等於功能。當完成第一組運算元後按運算子時,就把第一組運算元的資料存下來,並清空Label然後註記已被按下運算子。接下來所按的數字一直到按了等於時,就將第二組運算元存下來並照剛剛所按下的運算子組成運算式。然後再透過谷歌大神給的程式碼就能算出答案(這邊是以Double型態運算)。
//谷歌大神提供的程式
let exp: NSExpression = NSExpression(format: 運算式)
let result: Double = exp.expressionValue(with:nil, context: nil) as! Double//print 到 console的運算式與答案
-11.1+11.1 0.0
8.0/4.0 2.0
這個程式另一個很燒我腦的問題是,程式以Double型態在做運算,運算結果就算人腦認知是整數也會為被以 .0 呈現,為了讓畫面簡單一點,運算結果是整數就不要出現 .0 。 初期想了好幾個方式來做去除 .0 試了快一個星期後選了一個笨笨的方式,就是把運算結果轉成Int,然後再拿Double型態的結果減Int型態,如果等於 0 .0 ,那 Label 就呈現 Int型態的資料,如果相減的結果不等於 0 .0 就呈現 Double型態的資料。