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

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. struts调用的几种方法

    在Struts2中方法调用概括起来主要有三种形式 第一种方式:指定method属性 <action name="student" class="com.itmyho ...

  2. activeMQ设置admin的用户名和密码

    ActiveMQ使用的是jetty服务器, 打开conf/jetty.xml文件,找到 <bean id="securityConstraint" class="o ...

  3. (转)javascript中event对象详解

    原文:http://jiajiale.iteye.com/blog/195906 javascript中event对象详解          博客分类: javaScript JavaScriptCS ...

  4. BZOJ 2442 修剪草坪

    NOIP的时候一定要看清楚数据范围. #include<iostream> #include<cstdio> #include<cstring> #include& ...

  5. 文件操作II

    <html> <head> <meta charset="utf-8"> </head> <body> <?php ...

  6. BZOJ3261 最大异或和 (可持久化Trie)

    ; len=; var x,y,z,n,m,tot,lx,i:longint; sum:..maxn] of longint; rt:..maxn] of longint; time,l,r:..ma ...

  7. JSOI地铁换票 (贪心)

    简单贪心即可. ..] of longint; var a,b:arr; i,n,m,sum:longint; procedure sort(var a:arr;l,r: longint); var ...

  8. js优化提升访问速度

    一.给JS文件减肥. 有的人为了给网站增加炫目效果,往往会使用一些JS效果代码,这在上个世纪似乎还很流行,对于现在来说,最好在用户体验确实需要的情况下,使用这些东西.至于希望给自己的JS文件减肥的童鞋 ...

  9. sk_buff 结构分析

    sk_buff分析 sk_buff是Linux网络代码中最重要的结构体之一.它是Linux在其协议栈里传送的结构体,也就是所谓的“包”,在他里面包含了各层协议的头部,比如ethernet, ip ,t ...

  10. Eclipse Java 开发平台实用技巧

    前言 在使用Eclipse开发Java程序的使用,有很多实用的技巧,能大大提高开发效率. 本文将介绍一部分技巧.更多的心得还得在具体项目中慢慢掌握,熟悉. 初始设定 这些具体的设置方法这里不说,网上很 ...