看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对block掌握的不熟练。

我已经明白了,所以,和大家分享一下我的理解!如有问题,麻烦大家指出!

直接看代码吧!关键的注释都有。

我自己运行过,可以正常运行!(控制台代码)

#import <Foundation/Foundation.h>

@class CalculatorMaker;

typedef CalculatorMaker *(^ReturnBlock)(int);

// Class - CalculatorMaker
@interface CalculatorMaker : NSObject @property (nonatomic, assign) int result; - (ReturnBlock)add; @end @implementation CalculatorMaker - (ReturnBlock)add{
//add被执行,返回一个用于计算的block
return ^CalculatorMaker *(int x){ //这里的CalculatorMaker *是为了说明问题。日常使用建议用id self.result += x;
return self; //返回了一个CalculatorMaker *
};
} @end // Category - Caculator
@interface NSObject (Caculator) + (int)makeCaculators:(void(^)(CalculatorMaker *make))caculatorBlock; @end @implementation NSObject (Calculate) + (int)makeCaculators:(void(^)(CalculatorMaker *make))caculatorBlock{ CalculatorMaker *maker = [[CalculatorMaker alloc]init];
caculatorBlock(maker);
return maker.result;
} @end // main
int main(int argc, const char * argv[]) {
@autoreleasepool {
int result = [NSObject makeCaculators:^(CalculatorMaker *maker){
CalculatorMaker *mk = [[CalculatorMaker alloc]init];
ReturnBlock blc = mk.add; //blc为add方法执行后返回的block
mk = blc(); //执行block后,block返回了一个CalculatorMaker实例
maker.result = mk.add().add().result;
//因此,可以直接进行链式编程
//mk.add返回了一个block,block(2)返回了一个实例(加入叫obj),这个实例obj执行add,又返回了一个block
//block又执行block(3)后又返回了一个实例
}];
NSLog(@"\nresult = %d",result); }
return ;
}

原创文章,转载请注明出处!谢谢合作!

比较有价值的参考资料:http://www.jianshu.com/p/540711c1a507

iOS 链式编程探索(Masonry)的更多相关文章

  1. 实现iOS中的链式编程

    谈到链式编程,那Masonry几乎就是最经典的代表.如: make.top.equalTo(self.view).offset() 像这样top.equalTo(self.view).offset(6 ...

  2. Objective-C 链式编程思想

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

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

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

  4. iOS 开发之使用链式编程思想实现简单的计算器

    链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好.例如 a(1).b(2).c(3). 链式编程思想最为关键的是,方法的返回值是block,block必须返回对 ...

  5. ios的链式编程笔记

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

  6. 第四十一篇、Masonry利用Block实现链式编程

    一直都觉得使用Masonry的时候语法特别优雅,很早的时候就想尝试下怎么实现, 一直都没弄明白,直到最近看见一篇叫block实现链式编程的 1.方法的返回类型是代码块 >代码块的返回类型是该类的 ...

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

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

  8. iOS端JSON转Model链式编程框架SuperKVC使用方法与原理

    背景 在client编程中.字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入.且无法处理类型转换.key与属性名不正确应 ...

  9. 模仿Masonry链式编程思想

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

随机推荐

  1. 移动端视网膜(Retina)屏幕下1px边框线 解决方案

    原因: 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在devicePixelRatio=2的retina屏下会显示成2px. 但在IOS8中,已经支持0.5px了,那就意味着, 在de ...

  2. Delphi XE7中各种字符串与字符类型的内存结构

    1. ShortString 类型 定义:type ShortString = string[255]; 内存结构与大小:ShortString 是每个字符为单字节的字符串.ShortString 的 ...

  3. jquery_DOM笔记3

    css 操作: css()设置或者返回匹配元素的样式 height() 设置或者返回匹配元素的高度 width() 设置或者返回匹配元素的宽度 offset()设置或者返回匹配元素相对于文档的相对位置 ...

  4. ng-app一些使用

    ng-app是angular的一个指令,代表一个angular应用(也叫模块).使用ng-app或ng-app=""来标记一个DOM结点,让框架会自动加载.也就是说,ng-app是 ...

  5. WhatsApp的Erlang世界

    rick 的两个ppt整理 下载:2012 2013  ,使用半年erlang后,重新看这两个ppt才发现更多值的学习的地方,从ppt中整理如下: - Prefer os:timestamp to e ...

  6. asp.net4.5尚未在web服务器上注册 解决方案

    以前都是直接用aspnet_regiis.exe -i 现在用这个不好使了,解决办法打微软补丁. https://blogs.msdn.microsoft.com/webdev/2014/11/11/ ...

  7. DIV+CSS布局

    宽度自适应两列布局 <!DOCTYPE html> <html> <head> <meta charset="gbk"> <t ...

  8. uiautomator-----UiWatcher监听器

    一.UiWatcher类说明 1.Uiwatcher用于处理脚本执行过程中遇到非预想的步骤 2.UiWatcher使用场景 1)测试过程中来了一个电话 2)测试过程中来了一条短信 3)测试过程中闹钟响 ...

  9. shell 指定范围产生随机数

    #/bin/bash echo "---------------产生随机数---------------" read -p "请输入起始数:" a read - ...

  10. qt 定时器

    重写方法 virtual void timerEvent(QTimerEvent *event); 启动定时器 timerId = startTimer(500);