链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。例如 a(1).b(2).c(3)。

  链式编程思想最为关键的是,方法的返回值是block,block必须返回对象本身(返回block时,block所在的方法调用者对象)block的参数是需要操作的值。;

  在iOS开发中,使用链式编程思想最好的代表是 Masonry 自动约束布局:

  例如:

[itemButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(contentView.mas_left).offset( + (itemWidth+)*i);
make.top.equalTo(contentView.mas_top).offset();
make.width.height.equalTo(@(itemWidth));
}];

  执行流程为:

/**
mas_makeConstraints执行流程:
1.创建约束制造者MASConstraintMaker,并且绑定控件,生成一个保存所有约束的数组
2.执行mas_makeConstraints传入的Block
3.让约束制造者安装约束!
* 1.清空之前的所有约束
* 2.遍历约束数组,一个一个安装
*/

  可以看出,使用链式编程,代码可读性较好。

  仿照 Masnory 使用链式编程思想写个运算器:

#import <Foundation/Foundation.h>

@interface CalculateManager : NSObject

@property (nonatomic, assign) int result;

- (CalculateManager *(^)(int value))add;

- (CalculateManager *(^)(int value))minus;

- (CalculateManager *(^)(int value))multiply;

- (CalculateManager *(^)(int value))devite;

@end

  

#import "CalculateManager.h"

@implementation CalculateManager

- (CalculateManager *(^)(int))add {
return ^(int value) {
_result += value;
return self;
};
} - (CalculateManager *(^)(int))minus {
return ^(int value) {
_result -= value;
return self;
};
} - (CalculateManager *(^)(int))multiply {
return ^(int value) {
_result *= value;
return self;
};
} - (CalculateManager *(^)(int))devite {
return ^(int value) {
_result /= value;
return self;
};
} @end

  

#import "NSObject+Calculate.h"

#import "CalculateManager.h"

@implementation NSObject (Calculate)

+ (int)ztb_calculateValue:(void(^)(CalculateManager *make))block
{
CalculateManager *manager = [[CalculateManager alloc] init];
block(manager);
return manager.result;
} @end

  在使用时:

int result = [NSString ztb_calculateValue:^(CalculateManager *make) {
make.add().multiply().devite().minus().add();
}];

  可以在 Block 中进行运算了

iOS 开发之使用链式编程思想实现简单的计算器的更多相关文章

  1. iOS利用block实现链式编程方法(Objective-C链式编程)

    objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block ...

  2. Objective-C 链式编程思想

    链式编程思想 链式编程是什么 链式编程就是将调用多个方法用点语法连接起来,让代码更加简洁和可读性更高刚开始接触链式编程是Masonry,用起来真的非常爽 1 make.left.right.top.e ...

  3. 模仿Masonry链式编程思想

    使用masonry 也将近一年多了,它的链式编程方式一直是很吸引我的. 之前一直没空好好思考它是如何实现,直到现在正好自己有空,因此写下链式编程的基本思路. 链式基本的编程形式如 a.property ...

  4. iOS开发--Swift RAC响应式编程初探

    时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, ...

  5. iOS开发--Swift RAC响应式编程

    时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, ...

  6. iOS开发雕虫小技之傻瓜式定位神器-超简单方式解决iOS后台定时定位

    1.概述 由于公司一款产品的需求,最近一直在研究iOS设备的后台定位.主要的难点就是,当系统进入后台之后,程序会被挂起,届时定时器.以及代码都不会Run~ 所以一旦用户将我的App先换到了后台,我的定 ...

  7. ios的链式编程笔记

    1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数  > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...

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

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

  9. iOS开发技巧系列---使用链式编程和Block来实现UIAlertView

    UIAlertView是iOS开发过程中最常用的控件之一,是提醒用户做出选择最主要的工具.在iOS8及后来的系统中,苹果更推荐使用UIAlertController来代替UIAlertView.所以本 ...

随机推荐

  1. 创建目录命令 - mkdir

    (1) 命令名称:mkdir (2) 英文原意:make directories (3) 命令所在路径:/bin/mkdir (4) 执行权限:所有用户 (5) 功能描述:创建新目录 (6) 语法: ...

  2. SSH后台分页

    初学SSH,开始用的Struts2+Hibernate3+Spring3,Hibernate中用的HibernateTemplate进行数据库的操作.之后在进行前台页面显示的时候,要用到分页,查了一下 ...

  3. 第四十三篇 入门机器学习——Numpy的基本操作——Fancy Indexing

    No.1. 通过索引快速访问向量中的多个元素 No.2. 用索引对应的元素快速生成一个矩阵 No.3. 通过索引从矩阵中快速获取多个元素 No.4. 获取矩阵中感兴趣的行或感兴趣的列,重新组成矩阵 N ...

  4. vue引用fastClick后,ios输入框聚焦不灵敏问题

    fastClick.prototype.focus = function (targetElement) {       targetElement.focus() }

  5. EditPlus等编辑器选中列(块)的方法

    EditPlus 1)菜单:编辑 -> 选择 -> 列选择2)先按下 Alt + C ,释放,然后移动鼠标或键盘上下左右键进行选择注意:在自动换行的模式下是不行的,改为不自动换行就行了. ...

  6. 【PAT甲级】1113 Integer Set Partition (25分)

    题意: 输入一个正整数N(2<=N<=1e5),接着输入N个正整数,将这些数字划分为两个不相交的集合,使得他们的元素个数差绝对值最小且元素和差绝对值最大. AAAAAccepted cod ...

  7. 解决linux 中文乱码

    解决办法是在文件/etc/profile末尾添加一行 echo 'export LC_ALL="en_US.UTF-8"' >> /etc/profile source ...

  8. Hadoop中的java基本类型的序列化封装类

    Hadoop将很多Writable类归入org.apache.hadoop.io包中,在这些类中,比较重要的有Java基本类.Text.Writable集合.ObjectWritable等,重点介绍J ...

  9. 任务队列方案详解(一)JVM线程池

    前言 我们都知道 web 服务的工作大多是接受 http 请求,并返回处理后的结果.服务器接受的每一个请求又可以看是一个任务.一般而言这些请求任务会根据请求的先后有序处理,如果请求任务的处理比较耗时, ...

  10. es6模块化设计

    //导出 //方式一 export const name = 'hello' export let addr = 'chengdu' export var list = [1,2,3] //方式二 c ...