Gather ye rosebuds while ye may

一个Calcu App的实现

swift · app

突然又想写代码了,于是今天心血来潮想做一个类似于win7上面计算器(程序员版)的app
我果手机的科学计算器并没有这个功能,在我专业某些时候使用还是挺无力的,不如自己写一个,也花不了几天
calcu的github

主界面差不多就这样:主界面

界面

功能看图,写得很明白了
Hex Dec Oct Bin就是十六进制,十进制,八进制,二进制
然后是循环左移循环右移,或运算异或运算,左移右移,非运算和运算
然后是0~F数字
再往右是加减乘除
然后是clean,backspace,求余数,等于


功能

上面写道的功能都有
然后就是在1024上面留64个二进制位,跟windows上面程序员的用途一样
并没有往里添加小数点,这个是因为windows的那个版本没有小数点

windows版本有左右括号,我暂时没有思路就没有做
另外就是+-符号没有添加,这个的话,手动也不难


实现

暂时把写了一半的代码放下面
我实在是有点晕了,现在(2015年9月21日下午11:30)的思路跟上午开始时的思路不一样了
说明做事情要善始善终,不然就白费好多功夫


问题

  1. 输入一个数,按了加减乘除之后存成数据到temp(num1)里面,还要用一个字符串存这时候的运算符ope
  2. 再输入一个数,再按加减乘除的话,通过temp、这个数、ope计算出值,放在resul位置,然后把刚才resul的位置上的数覆盖在temp上面,这样点击等号的话可以继续计算
  3. 还有不知道怎么实现在二进制的时候其他数字按钮不可选中,选中二进制的时候该按钮高亮
  4. 十六进制的ABCDEF怎么转化为10进制这个问题暂时没有开始想
  5. 左移右移这个也是问题

//不要说我鸽

这个肯定写得完,只可惜明天从天亮上课上到天黑~
那么就把思路要点先放在这里,等明儿晚上继续


2015年9月23日上午12:02 继续

今天重新开始了 把思路缕了一缕
从算法设计开始重新来


2015年9月23日上午1:59 update

十进制功能完成了


进制转换功能完成

本来想放代码的,想想算了,把以前的都给删除了

//方法1: 定义一个变量表示原进制,另一个Int表示目的进制,原进制2,8,10,16进制用数字0,1,2,3表示;目的进制用1,5,9,13表示
// 进行进制转换调用一转换函数,函数通过原进制和目的进制变量的和得知(4*4-4)中的一种转换 需要写12种转换方式
//方法2: swift里面吧所有的0x 0o 0b全部以十进制存储
// 在输入的时候,实时将String转换为Int 专为十进制的时候只用一个方法,转出方法(短除法)也只有一中
// 需要一个temp放十进制的数,每次进制转换都从temp来转
// 可以用resultLabel0直接接短除法的输出的,但是resultLabel0会在用户面前变化,为了避免这种情况发生,需要一个String来记录输出
// 用一个变量告诉转入十进制方法原进制,告诉转出方法目的进制

然后采用了第二种方式,不同进制的运算都转换到十进制,突然感觉第一种转换还有点困难啊。。。

问题

  1. 在非十进制的情况下点击opeButton/eqaButton的时候会闪退
  2. backspace没有设置
  3. Or Xor Not And 没有设置
  4. 输入太多了就退出了,重要的是我也不知道为何
    不祥的预感 是不是要重写计算按钮

解决方案

  1. 非十进制下不能进行其他操作 =。=别怪我

2015年9月24日 睡前更新

遇见个特傻逼的问题还debug了半天
结果就是我为了调用一个含参的Action(sender: AnyObject)
把中间的sender: AnyObject给删除了
于是AppDelegate: UIResponder, UIApplicationDelegate就爆炸了
找了半天,把github上昨晚版本都clone下来了。。。

更新内容有:

  1. 向十进制和二进制分别制定了可操作按钮,完全不给特殊情况机会。。。主要是懒难得debug了
  2. backspace键完成了
  3. 在现实区域上面添加了位数的指示,就是在storyboard上加了几个label而已。。

还需要完成:

  1. 最上面还要一行/多行 用于or xor not and操作的可视化,毕竟自己都不知道怎么做
  2. ui改进 这个等最后来吧
  3. 左右挺进/循环挺进
  4. 位数限制,避免内存太大。。
    结尾打卡2015年9月24日下午11:32

2015年9月25日下午3:36

完成

  1. 左右挺进/循环挺进

问题

  1. 二进制超过12位,瞬间爆炸
  2. 其他进制同理,等着最后debug或添加约束
  3. 代码的简化,多个action可以用if精简到一起
  4. 10(123)+ bin 直接出来。。

2015年9月26日上午2:13 停止更新

有其他更重要的事情做,停止更新
四个逻辑按钮功能已经写出来,可以在git上看到主代码
没有debug,其他功能可用

可能是兴趣到此为止了
开始的时候着急了 规划出了问题
应该想清楚功能分区的
现在好几个地方都混在一起了 改都不好改 莫名其妙跳到Hex上面
不写了 宁愿重写个逻辑运算器都不在这上面改了


以上