Block语法帮助我们组织独立的代码段,并提高复用性和可读性。
这一集我们主要讲创建block和通过block进行方法回调。
先看一下block的结构
1.创建一个无参数无返回值的block
void(^myblock)() = ^(){
NSLog(@"first block");
};
/ 调用
myblock();
2.创建一个无参数有返回值类型的block
void(^myblock)(NSString * )= ^(NSString * a)
{
};
myblock(@"123");
3.创建一个多参数有返回值的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 nil];
NSLog(@"array = %@",array);
return array;
};
myblock(@"123",67);
接下来开始block 回调用来在视图控制器间传值
方法1 属性传值 假设一个字符串从B视图控制器传给A视图控制器
B.h:
1. 定义block 的型参类型 (类型名首字母大写哟)
2.设置一个这个类型的成员变量
typedef void(^secondblock)(NSString*);
@interface SecongViewController : UIViewController
{
}
@property(nonatomic,copy)secondblock secondb;
3.注意: block类型的没有*
B.m
// 调用用传给A
self.secondb(@"hahaha");
方法2:方法传值 假设从B视图控制器传给A视图控制器改变a的背景颜色
B.h
typedef void(^secondblock)(NSString*);
//没有参数代表任意参数 在定义的时候
@interface SecongViewController : UIViewController
{
colorblock _changecolorblock;
}
-(void)changColorWithBlock:(colorblock)block;
B.m
-(void)buttonAction:(id)sender
{
_changecolorblock([UIColor greenColor]);
}
-(void)changColorWithBlock:(colorblock)block
{
_changecolorblock = Block_copy(block);
}