• 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;
            
  • 相关阅读:
    六.初识Mybatis
    python中文资源大全
    阅读《乌云回忆录一》后的一点感慨
    SSH无法连上CentOS7的问题
    [转]sqlmap使用教程
    [转]11种常见sqlmap使用方法详解
    ZVulDrill渗透环境搭建及部分题目writeup
    渗透资源大全-整理
    【洛谷5934】[清华集训2012] 最小生成树(最小割)
    【洛谷3974】[TJOI2015] 组合数学(模拟最大流)
  • 原文地址:https://www.cnblogs.com/longling2344/p/5126021.html
Copyright © 2020-2023  润新知