objective-c 一个链式加法计算器实现

一个链式加法计算器实现思路ide

 

1.使用时的效果ui

Calculate * manger=[Calculate new];atom

int result=manger.add(123).add(123).sub(123).result;spa

 

输出结果为:result:123设计

 

2.实现方法code

新建Calculate类;对象

加一个属性@property(nonatomic,assign) int result,做为计算结果;blog

由于使用的方式为 result=manger.add(123).add(123).sub(123).....get

 (在OC中点语法本质上是调用对象的属性的get,set方法)input

能用点语法调用说明add(123)是manger这个对象的属性,带有参数123必定是block去做为属性了,

由于能连续的使用点语法因此add(123)的返回值应该是对象自己

由于返回对象自己后能够继续使用点语法调用这个属性;

 

这个block的参数的值类型应该是float/double/int等,用于传"add(123)"中的123值。

好了肯定了block的返回值类型和参数类型,能够开始设计这个block了,

以输入参数值类型为int为例 应该是

Calculter*(^)(int)=^(int inputNum){

        self.result+=inputNum;

        return self;    };

把Calculter*(^)(int)这种形式block的做为属性的类型;在相应的get方法里实现block的操做就能够了;

下面是完整代码:

 1 //  Calculter.h
 2 //  Created by longkin on 16/1/12.
 3 
 4 @class Calculter;
 5 #import <Foundation/Foundation.h>
 6 //block的名字是CalculateOption 返回值类型是Calculter* 参数类型是int
 7 typedef Calculter*(^CalculateOption)(int);
 8 
 9 @interface Calculter : NSObject
10 @property(nonatomic,assign) int result;
11 @property(nonatomic,copy) CalculateOption add;
12 @property(nonatomic,copy) CalculateOption sub;
13 @property(nonatomic,copy) CalculateOption muilt;
14 @property(nonatomic,copy) CalculateOption divide;
15 @end
 1 //  Calculter.m
 2 //  Created by longkin on 16/1/12.
 3 
 4 #import "Calculter.h"
 5 @implementation Calculter
 6 
 7 /**
 8  *add的get方法的返回值类型是block,block的返回值是对象自己
 9  */
10 -(CalculateOption)add
11 {
12     return ^(int inputNum){
13         self.result+=inputNum;
14         return self;
15     };
16 }
17 
18 -(CalculateOption)sub
19 {
20     return ^(int inputNum){
21         self.result-=inputNum;
22         return self;
23     };
24 }
25 
26 -(CalculateOption)muilt
27 {
28     return ^(int inputNum){
29         self.result*=inputNum;
30         return self;
31     };
32 }
33 
34 -(CalculateOption)divide
35 {
36     return ^(int inputNum){
37         self.result/=inputNum;
38         return self;
39     };
40 }
41 
42 @end

使用效果:

        Calculter* calc =[Calculter new];
        int result =calc.add(1).add(2).muilt(3).divide(3).result;
        
相关文章
相关标签/搜索