博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Block 的基本用法
阅读量:4648 次
发布时间:2019-06-09

本文共 2281 字,大约阅读时间需要 7 分钟。

iOS中Block的基础用法

转载自简书
本文简介

本章不会对Block做过多的实现研究。只是讲解基本的用法。纯粹基础知识。结合实际项目怎么去做举例。Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。

Block简介

Block是一种比较特殊的数据类型。它可以保存一段代码,在合适的时候取出来调用。

Block的定义格式

返回值类型(^block变量名)(形参列表) = ^(形参列表) {

};
调用Block保存的代码
block变量名(实参);

默认情况下,Block内部不能修改外面的局部变量

Block内部可以修改使用__block修饰的局部变量

Block的模式

1.无参数无返回值的Block

2.有参数无返回值的Block
3.有参数有返回值的Block

Block简单用法举例

无参数无返回值的Block

/** *  无参数无返回值的Block */-(void)func1{    /**     *  void :就是无返回值     *  emptyBlock:就是该block的名字     *  ():这里相当于放参数。由于这里是无参数,所以就什么都不写     */    void (^emptyBlock)() = ^(){        NSLog(@"无参数,无返回值的Block"); }; emptyBlock(); }

有参数无返回值的Block

/**     *  调用这个block进行两个参数相加     *     *  @param int 参数A     *  @param int 参数B     *     *  @return 无返回值     */    void (^sumBlock)(int ,int ) = ^(int a,int b){ NSLog(@"%d + %d = %d",a,b,a+b); }; /** * 调用这个sumBlock的Block,得到的结果是20 */ sumBlock(10,10);

有参数有返回值的Block

/**     *  有参数有返回值     *     *  @param NSString 字符串1     *  @param NSString 字符串2     *     *  @return 返回拼接好的字符串3     */        NSString* (^logBlock)(NSString *,NSString *) = ^(NSString * str1,NSString *str2){ return [NSString stringWithFormat:@"%@%@",str1,str2]; }; //调用logBlock,输出的是 我是Block NSLog(@"%@", logBlock(@"我是",@"Block"));

Block结合typedef使用

自己定义一个Block类型,用定义的类型去创建Block,更加简单便捷。

这里举例一个Block回调修改上一下界面的背景颜色。
ViewController1 控制器1,ViewController2 控制器2
控制器1跳转到控制器2,然后在控制器2触发事件回调修改控制器1的背景颜色为红色。

ViewController2的实现

#import 
@interface ViewController2 : UIViewController /** * 定义了一个changeColor的Block。这个changeColor必须带一个参数,这个参数的类型必须为id类型的 * 无返回值 * @param id */ typedef void(^changeColor)(id); /** * 用上面定义的changeColor声明一个Block,声明的这个Block必须遵守声明的要求。 */ @property (nonatomic, copy) changeColor backgroundColor; @end
-(void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event{ //声明一个颜色 UIColor *color = [UIColor redColor]; //用刚刚声明的那个Block去回调修改上一界面的背景色 self.backgroundColor(color); }

ViewController1的实现

-(void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event{ ViewController2 *vc =[[ViewController2 alloc]init]; // 回调修改颜色 vc.backgroundColor = ^(UIColor *color){ self.view.backgroundColor = color; }; [self.navigationController pushViewController:vc animated:YES]; }

转载于:https://www.cnblogs.com/TheYouth/p/4903359.html

你可能感兴趣的文章
第一次软件工程作业(改进版)
查看>>
网络流24题-飞行员配对方案问题
查看>>
Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
查看>>
引入css的四种方式
查看>>
iOS开发UI篇—transframe属性(形变)
查看>>
3月7日 ArrayList集合
查看>>
jsp 环境配置记录
查看>>
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Some configure
查看>>
流量调整和限流技术 【转载】
查看>>
1 线性空间
查看>>
VS不显示最近打开的项目
查看>>
DP(动态规划)
查看>>
chkconfig
查看>>
2.抽取代码(BaseActivity)
查看>>
夏天过去了, 姥爷推荐几套来自smashingmagzine的超棒秋天主题壁纸
查看>>
反射的所有api
查看>>
css 定位及遮罩层小技巧
查看>>