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

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. struts2+hibernate整合开发步骤

    百度的各种代码,步骤,自己整合了一下 1,创建数据库 常用mysql   creat table..... 2,在WebContent下的bin中添加相应的包 http://pan.baidu.com ...

  2. IOS 用keychain(钥匙串)保存用户名和密码

    IOS系统中,获取设备唯一标识的方法有很多: 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Identifier,顾名思义,它就是苹果I ...

  3. php大力力 [007节]php静态表量

    2015-08-23 php大力力007. php静态表量 这里看一下高老师的视频讲解: 转帖: php中static静态类与static 静态变量用法区别 php中的静态变量的基本用法 转载 时间: ...

  4. Ubuntu11.10 更新软件源source.list (ZT)

    添加完列表后执行 sudo apt-get update sudo apt-get upgrade  --------添加列表------------------------------------- ...

  5. Get Many Persimmon Trees_枚举&&二维树状数组

    Description Seiji Hayashi had been a professor of the Nisshinkan Samurai School in the domain of Aiz ...

  6. js中 return false

    一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二.返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件 ...

  7. 编程之美的2.17,数组循环移位 & 字符串逆转(反转) Hello world Welcome => Welcome world Hello

    代码如下:(类似于编程之美的2.17,数组循环移位) static void Main(string[] args) { string input = "Hello World Welcom ...

  8. 【Avalon源码】dateGetter

    function dateGetter(name, size, offset, trim) { return function(date) { var value = date["get&q ...

  9. 详解for循环(各种用法)

    常见的for循环一般是一下代码这种结构: for (int i = 0; i < 100; i++){    Console.WriteLine(i);} 或者递减的:              ...

  10. 【转】MySQL命令

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...