-
block传值
利用block去代理代理传值
1. 代理传值
点击当前控制器Viewcontroller利用modal跳转的方式跳转到ModalViewController,再点击ModalViewController向Viewcontroller传值进行打印输出.

创建ModalViewController并设置代理协议

点击ModalViewController的时候让代理去传值

在Viewcontroller里面遵守代理协议并实现代理方法

2. block传值
在ModalViewController.h文件里面定义一个带参数的block属性

在ModalViewController.m文件里传值给ViewController

在ViewController里面给block赋值

这样就完成了block代理代理的方式进行逆向传值,由此可以,利用block代码会简便许多
-
block作为函数的参数使用
作为参数的block什么时候调用?
- 当成参数的block并不是立即调用,而是由方法的内部决定,不用外界干预.
什么时候把block设计成参数?
- 做的事情由外界决定,什么时候做由方法内部决定.
下面用block作为参数实现一个简单计算器
- 创建计算器管理者类CalculatorManager。在.h中声明:
//保存计算结果
@property(nonatomic,assign)NSInteger result;
//计算方法,接收一个结果参数,将计算后的新的结果值返回出去
- (void)Cacultor:(NSInteger(^)(NSInteger result))cacultorBlock;
- 在.m中实现如下
- (void)Cacultor:(NSInteger (^)(NSInteger))cacultorBlock{
if (cacultorBlock) {
_result = cacultorBlock(_result);
}
}
- 在窗口的根控制器的viewDidLoad中使用如下:

-
打印结果是121
-
block作为函数的返回值使用
-
block作为函数的返回值目的是替代放大,并且封装block的内部实现
-
主要体现是的一种链式编程思想,把所有语句用点号连接起来,代码的可读性非常好
下面同样封装一个简单计算器,提供一个加号方法
- 首先同样创建计算器管理者类CalculatorManager。在.h中声明

- 然后在.m中实现

- 在窗口的根控制器的viewDidLoad中使用如下:

网友评论