标签:
一个链式加法计算器实现思路
1.使用时的效果
Calculate * manger=[Calculate new];
int result=manger.add(123).add(123).sub(123).result;
输出结果为:result:123
2.实现方法
新建Calculate类;
添加一个属性@property(nonatomic,assign) int result,作为计算结果;
因为使用的方式为 result=manger.add(123).add(123).sub(123).....
(在OC中点语法本质上是调用对象的属性的get,set方法)
能用点语法调用说明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;
标签:
原文地址:http://www.cnblogs.com/longling2344/p/5126021.html