这个练习对于自己是有点非常困难,但毕竟是被号称拥有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型态的资料。