IOS版计算器心得
为了不将其全写在ViewController中,分工明确,有了我们的ios MVC设计模式,
Model 数据
View 界面,呈现方式
Controller 数据与界面交互
三者之间的关系用那张著名的图就可以表示
现在来说计算器
- Model里写表达式求值算法(建议学学中缀转后缀)
- View里写计算器的界面
- Controller里写一些buttton的点击事件及输入检查(稍后会说)
我的做法是将所输入的存入一个字符串,然后点等号时,调用Model的方法计算出结果显示在屏幕上。
这个释比较简单的做法,可以用一些传值操作练习练习。
下面是一些细节问题的处理:
1.在中缀转后缀时,可以将操作数存在字符数组中时中间用空格或什么隔开
还有处理多位数和小数的情况
将数组NSArray转为字符数组:
char mCode, exp[100];
for(int i = 0;i < _expressionArray.count;i++){
// sscanf([[_expressionArray objectAtIndex:i] UTF8String], "%s", &mCode);
NSString *temp = [_expressionArray objectAtIndex:i];
mCode = [temp characterAtIndex:0];
exp[i] = mCode;
}
如果用如下sscanf程序会很不稳定
sscanf([[_expressionArray objectAtIndex:i] UTF8String], "%s", &mCode);
将字符串转变为数组
_middleArray = [calculateString componentsSeparatedByString:@","];
2.Controller层里,将button的点击事件写进一个方法里,用tag值区别button
获取NSMutableString 的倒数第二个字符
_beforeString = [_mutableString substringFromIndex:[_mutableString length]- 2];
_beforeString = [_beforeString substringToIndex:[_beforeString length] - 1];
不能出现的情况:
0123,0000123
1.2.3
+/-/*//0123
操作符连接
括号不匹配
这些只需加一些判断