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;
        
时间: 2024-12-28 21:53:36

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

iOS:用Block写一个链式编程

一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式,初次写起来比较别扭,但是一旦习惯了,用起来比较得心应手.那么,如何写呢?其实就是一个对象调用它的实例方法后返回一个block(已经定义过),而这个block内部又返回该对象.依此类推,该对象不论调用多少个它的实例方法,最终都会返回该对象本身. 三.实例 LearnManager类定义和实现 // /

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

package main import "fmt" type Stu struct { Name string Age int } func (p *Stu) SetName(name string) *Stu { p.Name = name return p } func (p *Stu) SetAge(age int) *Stu { p.Age = age return p } func (p *Stu) Print() { fmt.Printf("age:%d, nam

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

在知乎上看到这样一个问题:http://www.zhihu.com/question/31805304; 简单地说就是实现这样一个add函数: add(x1)(x2)(x3)...(xn) == x1 + x2 + x3 + ... + xn // true; 正好发现在codewars上也有这道题,那不妨一块刷了吧. Kata Description level:5 kyu We want to create a function that will add numbers together

一个链式调用 setTimeout的例子

<div> 现在时间是:<input type="text" id="name1" size="16" value="" /> </div> <script> setTimeout(function () { var t = new Date(); //声明一个新的date对象 var hours = t.getHours(); //获取当前小时 var minutes = t.

第一个iOS程序--加法计算器

准备知识: 一.storyboard文件 1.在iOS5之前,苹果使用xib文件来描述UI界面2.在iOS5之后,苹果采取了更加强大和先进的storyboard文件来描述界面(Xcode5是基于iOS7的)3.左边的箭头表明:程序一启动就会显示箭头所指的界面 二:uiview(重要) 1.屏幕上能看得见摸得着的东西就是UIView,比如屏幕上的按钮.文字.图片 2.一般翻译叫做:视图\控件\组件 3.UIButton.UILabel.UITextField都继承自UIView 4.每一个UIVi

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

引言 对于 Objective-C 的语法,喜欢的人会觉得它是如此的优雅,代码可读性强,接近自然语言,开发者在调用大多数方法时不需要去查看注释或文档,通常只凭借方法名就可以大致知道这个方法的作用,可以理解为 代码即注释:而对于不喜欢的人来说,会觉得这种语法规则太啰嗦了! 直到第三方自动布局框架 Masonry 的出现,如下面代码,大家才发现,原来 Objective-C 还可以这么玩! [view1 mas_makeConstraints:^(MASConstraintMaker *make)

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

如何实现一个链式操作 function person() {} person.prototype = { setname: function(name) { this.name = name return this }, setage: function(age) { this.age = age return this }, getinfor: function() { console.log(this.age) console.log(this.name) } } var person1 =

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

前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的是外围的知识,有的是包含在框架内的. MVC学前篇字样?有噱头的成分也有真实的成分,所以工欲善其事,必先利其器.器是什么?基础嘛,虽然说MVC框架中涉及到的知识很多很多也不是我一篇两篇能说完的,我能做的就是知道多少就跟大家分享多少,当然了随着时间的推移会完善这个系列. 1扩展方法 扩展方法是C# 3.0特性里的知识,它用在最多的地方是在Linq中,

PHP链式操作的实现--即PHP数据操作类。

所谓链式操作最简单的理解就是 操作完毕之后再返回对象$this 想必大家工作中基本都快用烂了得东西. 下面就是一个链式操作MYSQL数据库类. 最常见的链式操作 每一个方法操作之后,返回一个对象,直到最后一个方法才是执行和返回整个链式操作的结果. $model->where()->field()->limit()->select() use PDO; class CyDB extends PDO { private $config = null; public $table; //