斯坦福大学第二课学习笔记-MyFirstIosApp

本次视频主要是完成一个简易计算器的雏形,其中的知识点如下所示

  1. 学习storyborad中view层控件拖拽定义变量的用法(.h),控件拖拽定义方法的用法(.m)
  2. 学习了私有变量和方法的定义方式
  3. 学习了创建model的方法
  4. 学习几种常见的oc类

 https://files.cnblogs.com/NeverLand-Lee/Caculator.zip

CalculatorBrain.h
1 #import <Foundation/Foundation.h>
2 简单定义两个共有方法
3 @interface CalculatorBrain : NSObject
4 -(void)pushOperand:(double)operand;
5 -(double)performOperation:(NSString*)operation;
6 
7 @end
CalculatorBrain.m
#import "CalculatorBrain.h"

@interface CalculatorBrain()
定义私有变量,可变数组
@property(nonatomic,strong) NSMutableArray* operandStack;

@end

@implementation CalculatorBrain
防止bug的写法
@synthesize operandStack = _operandStack; 重写它的get方法,在其中进行延迟初始化 -(NSMutableArray*) operandStack { //alloc the _operandStack if(_operandStack == nil){ _operandStack = [[NSMutableArray alloc]init]; } return _operandStack; } -(void)setOperandStack:(NSMutableArray *)operandStack { _operandStack = operandStack; } -(void)pushOperand:(double)operand {
  将double类型转换为object类型,并放入数组 NSNumber
* operandObject = [NSNumber numberWithDouble:operand]; //change operand to a object [self.operandStack addObject:operandObject]; } -(double)popOperand {
  将数组的中的元素取出,并进行判断是否为空 NSNumber
* operandObjct = [self.operandStack lastObject]; //make sure the array is not nil if (operandObjct) { [self.operandStack removeObject:operandObjct]; } return [operandObjct doubleValue]; } -(double)performOperation:(NSString*)operation {
  进行操作数的判断,判断完成后进行计算,并且将计算结果压回数组,并且返回结果
double result = 0; if([@"+" isEqualToString:operation]){ result = [self popOperand] + [self popOperand]; }else if([@"*" isEqualToString:operation]){ result = [self popOperand] * [self popOperand]; } //push it to array for a loop [self pushOperand:result]; return result; } @end
CalculatorViewController.h
//
//  CalculatorViewController.h
//  Caculator
//
//  Created by 建国 李 on 12-5-13.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface CalculatorViewController : UIViewController
通过拖拽的方式定义的label,因为view上面已经是strong所以这里是weak,并且最好所有界面上的控件都是weak @property (weak, nonatomic) IBOutlet UILabel
*display; @end
CalculatorViewController.m
//
//  CalculatorViewController.m
//  Caculator
//
//  Created by 建国 李 on 12-5-13.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "CalculatorViewController.h"
//import is in the .m file not .h file
引入model文件,注意并不是在.h文件中引入,而是在哪调用(一般为m文件)在哪引用
#import "CalculatorBrain.h" @interface CalculatorViewController () //private var decide the user is or not input
判断用户是否开始输入了
@property(nonatomic) BOOL userIsInTheMiddleOfEnterANumber;
定义一个私有的model对象 @property(nonatomic,strong) CalculatorBrain
* brain; @end @implementation CalculatorViewController @synthesize display = _display; @synthesize userIsInTheMiddleOfEnterANumber; @synthesize brain = _brain; -(CalculatorBrain*)brain{
进行延迟初始化
if(!_brain){ _brain = [[CalculatorBrain alloc]init]; } return _brain; } - (IBAction)digitPressed:(UIButton*)sender { // [[self display] setText:[[[self display] text] stringByAppendingString:[sender currentTitle]]]; 当用户开始输入的时候,进行label数字叠加 NSString* dight = [sender currentTitle]; if(userIsInTheMiddleOfEnterANumber){ self.display.text = [self.display.text stringByAppendingString:dight]; }else { self.display.text = dight; self.userIsInTheMiddleOfEnterANumber = YES; } } - (IBAction)enterPressed {
  用户点击erter按钮,将数字压入数组,并且将用户输入状态改为结束。 [self.brain pushOperand:[self.display.text doubleValue]]; self.userIsInTheMiddleOfEnterANumber
= NO; } - (IBAction)operationPressed:(UIButton *)sender { //userIsInTheMiddleOfEnterANumber = yes
  当用户输入完成数字的时候点击了操作符,帮助用户自动将数字装入数组
if(self.userIsInTheMiddleOfEnterANumber){ [self enterPressed]; }
  调用model进行计算,并且将结果转换为string显示在label上。
double result = [self.brain performOperation:sender.currentTitle]; NSString* resultString = [NSString stringWithFormat:@"%g",result]; self.display.text = resultString; } @end
posted @ 2012-05-14 21:59  NeverLand2011  阅读(395)  评论(0)    收藏  举报