Blocks的基础使用
2016-10-13 本文已影响0人
_Luyouli
Blocks是C语言的扩充功能。可以用一句话来表示Blocks的扩充功能;带有自动变量(局部变量)的匿名函数。顾名思义,所谓匿名函数就是不带有名称的函数。C语言的标准不允许存在着这样的函数。
Blocks基本语法
1.没有函数名。
2.带有“^”。
第一点不同是没有函数名,因为它是匿名函数。第二点不同是返回值类型前带有”^”(插入记号,caret)记号,因为OS X、iOS应用程序的源代码中将大量使用Block,所以插入该记号便于查找。表达式如下:
^ 返回值类型 参数列表 表达式
“返回值类型”同C语言函数的返回值类型,“参数列表”同C语言函数的参数列表,“表达式”同C语言函数中允许使用的表达式。当然与C语言函数一样,表达式中含有return语句时,其类型必须与返回值类型相同。
虽然前面出现过省略方式,但Block语法可省略好几个项目。首先是返回值类型 如下:
^ 参数列表 表达式
省略返回值类型时,如果表达式中有return语句就使用该返回值的类型。如果表达式中没有return语句就使用void类型。表达式中含有多个return语句时,所有return的返回值类型必须相同。
Block的基本使用
Block的模式
1.无参数无返回值的Block
2.有参数无返回值的Block
3.有参数有返回值的Block
创建两个视图,实现由ViewController 跳转到OtherViewController 然后在OtherViewController中触发事件回调 使ViewController得颜色改变
首先在OtherViewController里面声明一个block
typedef void(^changeColor)(id);// 声明一个block,声明这个Block必须遵守声明的要求。
@property (nonatomic,copy) changeColor backgroundColor;
然后在OtherViewController中实现写一个方法
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UIColor *color = [UIColor blueColor];
self.backgroundColor(color);
}
在ViewController 中的代码
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
OhterViewController *vc = [[OhterViewController alloc]init];
//回调修改颜色
vc.backgroundColor = ^(UIColor *color){
self.view.backgroundColor = color;
};
[self.navigationController pushViewController:vc animated:YES];
}