一個鏈式加法計算器實現思路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;