zoukankan      html  css  js  c++  java
  • objective-c 一个链式加法计算器实现

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

     

    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;
            
  • 相关阅读:
    2015.7.23 开始记录一些学习情况
    poj 3299 java
    在线编辑~
    MATLAB加载数据来绘图《原创翻译Loading Data into MATLAB for Plotting》
    【转载】matlab的reshape函数的作用
    (转载)CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )
    简单文本处理
    【转】CUDA与二维动态数组
    《转载》 cpp文件调用CUDA .cu文件实现显卡加速相关编程
    cuda_opencv之向量相加
  • 原文地址:https://www.cnblogs.com/longling2344/p/5126021.html
Copyright © 2011-2022 走看看