Blocks的基础使用

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];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 2.1 Blcoks概要 2.1.1 什么是Blocks Blocks是C语言的扩充功能——“带有自动变量(即局部...
    SkyMing一C阅读 2,445评论 6 18
  • Blocks编程要点 目录 简介............................................
    xuejunjun阅读 1,447评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,410评论 19 139
  • Blocks Blocks Blocks 是带有局部变量的匿名函数 截取自动变量值 int main(){ ...
    南京小伙阅读 1,055评论 1 3
  • 再过几天就是中秋节了,一个中国人团圆的日子。近来闲赋在家,晚饭后漫步于保定的街头,不知从何时起,秋风已刮了起...
    等风来_72c5阅读 337评论 0 0

友情链接更多精彩内容