Block语法帮助我们组织独立的代码段,并提高复用性和可读性。
这一集我们主要讲创建block和通过block进行方法回调。
先看一下block的结构
1.创建一个无参数无返回值的block
2.创建一个无参数有返回值类型的blockvoid(^myblock)() = ^(){ NSLog(@"first block"); }; // 调用 myblock();
3.创建一个多参数有返回值的blockvoid(^myblock)(NSString * )= ^(NSString * a) { }; myblock(@"123");
接下来开始block 回调用来在视图控制器间传值NSArray*(^myblock)(NSString*,int)= ^(NSString * str,int b) { // 数组里都是指针对象类型的 int /float /double 用nsnumber转成对象类型 NSNumber * num = [NSNumber numberWithInt:b]; NSArray * array = [NSArray arrayWithObjects:str,num, nil]; NSLog(@"array = %@",array); return array; }; myblock(@"123",67);
方法1 属性传值 假设一个字符串从B视图控制器传给A视图控制器
B.h:
1. 定义block 的型参类型 (类型名首字母大写哟)
2.设置一个这个类型的成员变量
3.注意: block类型的没有*typedef void(^secondblock)(NSString*); @interface SecongViewController : UIViewController { } @property(nonatomic,copy)secondblock secondb;
B.m
方法2:方法传值 假设从B视图控制器传给A视图控制器改变a的背景颜色// 调用用传给A self.secondb(@"hahaha");
B.h
typedef void(^secondblock)(NSString*); //没有参数代表任意参数 在定义的时候
B.m@interface SecongViewController : UIViewController { colorblock _changecolorblock; } -(void)changColorWithBlock:(colorblock)block;
block回调结束鸟 如果觉得协议传值麻烦难记不妨试试block吧。-(void)buttonAction:(id)sender { _changecolorblock([UIColor greenColor]); } -(void)changColorWithBlock:(colorblock)block { _changecolorblock = Block_copy(block); }
iOS Block语法详解
最新推荐文章于 2020-10-08 14:35:24 发布