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;
        
相關文章
相關標籤/搜索