#import "ViewController.h"
typedef enum{
kStausNum,
kStausOperation
}kStaus;
typedef enum{
kOperationTypeAdd = 1,
kOperationTypeMinus,
kOperationTypeMultiply,
kOperationTypeDevide,
kOperationTypeEqual,
kOperationTypeNone
}kOperationType;
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *result_label;
@property (nonatomic,assign) long long firstParam; //记录第一个参数
@property (nonatomic,assign) kOperationType lastOperation;//保存上一次的操作数
@property (nonatomic,assign) BOOL status;//记录当前的状态
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//赋初值
self.firstParam = 0;
self.lastOperation = kOperationTypeNone;
self.status = kStausNum;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)numButtonDidClicked:(UIButton *)sender {
//获取点击的按钮上的数字
int num = [sender.titleLabel.text intValue];
//判断继续拼接还是单独显示
long long showNum;
if (self.status == kStausNum) {
//获取之前显示的结果
long long orgNum = [self.result_label.text longLongValue];
//计算最终显示结果
showNum = orgNum * 10 + num;
}else{
showNum = num;
self.status = kStausNum;
}
//显示结果
self.result_label.text = [NSString stringWithFormat:@"%lld",showNum];
}
//操作键+-*÷
- (IBAction)operationButtonDidClicked:(UIButton *)sender {
if (self.status != kStausOperation) {
self.status = kStausOperation;
}
self.status = kStausOperation;
//有两种情况
//1.第一次操作,只需保存只一次操作
//2.前面有操作需要计算,并保存这一次的操作
//3.判断是不是第一次操作
if (self.lastOperation != kOperationTypeNone) {
//2.前面有操作需要计算,保存这次操作
[self calculate];
}else{
//第一个参数输入完毕 保存
self.firstParam = [self.result_label.text longLongValue];
}
//保存这一次操作
if (sender.tag == kOperationTypeEqual) {
self.lastOperation = kOperationTypeNone;
}else{
self.lastOperation = (kOperationType)sender.tag;//自定义tag的值
}
}
//计算结果
-(void)calculate{
int secondParam = [self.result_label.text intValue];
long long result;
switch (self.lastOperation) {
case kOperationTypeAdd:
result = self.firstParam + secondParam;
break;
case kOperationTypeMinus:
result = self.firstParam - secondParam;
break;
case kOperationTypeMultiply:
result = self.firstParam * secondParam;
break;
case kOperationTypeDevide:
result = self.firstParam / secondParam;
break;
default:
break;
}
//显示最终结果
self.result_label.text = [NSString stringWithFormat:@"%lld",result];
//当前的结果就是下一次的第一个参数的值
self.firstParam = result;
//更改操作符
self.lastOperation = kOperationTypeNone;
}
- (IBAction)resetButtonDidClicked:(UIButton *)sender {
self.result_label.text = @"0";
self.lastOperation = kOperationTypeNone;
self.status = kStausNum;
}
@end