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

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的操作就可以了;

下面是完整代码:

 //  Calculter.h
// Created by longkin on 16/1/12. @class Calculter;
#import <Foundation/Foundation.h>
//block的名字是CalculateOption 返回值类型是Calculter* 参数类型是int
typedef Calculter*(^CalculateOption)(int); @interface Calculter : NSObject
@property(nonatomic,assign) int result;
@property(nonatomic,copy) CalculateOption add;
@property(nonatomic,copy) CalculateOption sub;
@property(nonatomic,copy) CalculateOption muilt;
@property(nonatomic,copy) CalculateOption divide;
@end
 //  Calculter.m
// Created by longkin on 16/1/12. #import "Calculter.h"
@implementation Calculter /**
*add的get方法的返回值类型是block,block的返回值是对象本身
*/
-(CalculateOption)add
{
return ^(int inputNum){
self.result+=inputNum;
return self;
};
} -(CalculateOption)sub
{
return ^(int inputNum){
self.result-=inputNum;
return self;
};
} -(CalculateOption)muilt
{
return ^(int inputNum){
self.result*=inputNum;
return self;
};
} -(CalculateOption)divide
{
return ^(int inputNum){
self.result/=inputNum;
return self;
};
} @end

使用效果:

        Calculter* calc =[Calculter new];
int result =calc.add().add().muilt().divide().result;

objective-c 一个链式加法计算器实现的更多相关文章

  1. java开发中的链式思维 —— 设计一个链式过滤器

    概述 最近在弄阿里云的sls日志服务,该服务提供了一个搜索接口,可根据各种运算.逻辑等表达式搜出想要的内容.具体语法可见https://help.aliyun.com/document_detail/ ...

  2. iOS:用Block写一个链式编程

    一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式, ...

  3. [GO]小技巧,如何实现一个链式操作

    package main import "fmt" type Stu struct { Name string Age int } func (p *Stu) SetName(na ...

  4. [CodeWars][JS]实现链式加法

    在知乎上看到这样一个问题:http://www.zhihu.com/question/31805304; 简单地说就是实现这样一个add函数: add(x1)(x2)(x3)...(xn) == x1 ...

  5. 一个链式调用 setTimeout的例子

    <div> 现在时间是:<input type="text" id="name1" size="16" value=&qu ...

  6. 谈谈 Objective-C 链式语法的实现

    引言 对于 Objective-C 的语法,喜欢的人会觉得它是如此的优雅,代码可读性强,接近自然语言,开发者在调用大多数方法时不需要去查看注释或文档,通常只凭借方法名就可以大致知道这个方法的作用,可以 ...

  7. js实现一个简单的链式操作

    如何实现一个链式操作 function person() {} person.prototype = { setname: function(name) { this.name = name retu ...

  8. Objective-C 链式语法的实现

    对于 Objective-C 的语法,喜欢的人会觉得它是如此的优雅,代码可读性强,接近自然语言,开发者在调用大多数方法时不需要去查看注释或文档,通常只凭借方法名就可以大致知道这个方法的作用,可以理解为 ...

  9. ASP.NET MVC学前篇之扩展方法、链式编程

    ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...

随机推荐

  1. hdu 2086

    PS:推算...数组如果开得不够大也会超时... 代码: #include "stdio.h" double cal(int t,double a[]); int main(){ ...

  2. ios 从网络上获取图片并在UIImageView中显示

    ios 从网络上获取图片   -(UIImage *) getImageFromURL:(NSString *)fileURL { NSLog(@"执行图片下载函数"); UIIm ...

  3. 属性的定义以及@synthesize的使用

    1.属性通常是指某些由对象封装或储存的数据.它可以是标志(如名称或颜色),也可以是与一个或多个其他对象的关系. 2.属性的基本声明使用 @property 编译器指令,后面紧跟属性的类型信息和名称.您 ...

  4. 调用未绑定的父类方法和使用supper 函数 之间的选择.

    class New_int(int): # 定义一个新的类 继承 int 类 def __add__(self,other): # 重写 + 运算符 # __add__ 就是 int 中 + 的行为 ...

  5. php5.2 连接 SQL Server2008

    如果你见到下面这一段输出的话,那么你有福了!!!! Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => ...

  6. 如何解决火狐FF里Input标签刷新页面后 仍然保存之前输入的内容的方法。

    直接在input 标签里 增加 autocomplete="off".火狐默认为 on.

  7. 产生n位元的所有格雷码

    原文链接:http://blog.csdn.net/beiyeqingteng/article/details/7044471 问题:产生n位元的所有格雷码. 格雷码(Gray Code)是一个数列集 ...

  8. IO 流 定义

    一.什么是流? 流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由地控制文件.内存.IO设备等数据的流向. ...

  9. HDU 5093

    http://acm.hdu.edu.cn/showproblem.php?pid=5093 二分图最大匹配的经典建图模型,行列分别缩点(连起来的'*' & 'o'),交集有'*'就连边 #i ...

  10. 【转】C 宏

    http://www.cs.yale.edu/homes/aspnes/pinewiki/C%282f%29Macros.html See KernighanRitchie Appendix A12. ...