1.block相关的一些基本
在类中定义一个block变量,就像定义一个函数,可以定义在方法的内部,也可以定义在方法的外部。只有调用block的时候,才会执行block块中的方法,而且在block的方法体内。是不可以对外面的变量进行修改的。但是用__block定义的变量是可以在方法体内修改的。
定义返回值类型为NSInteger,方法名为IntBlock的代码块:
NSInteger currentNum = 9;
NSInteger (^IntBlock)(NSInteger) = ^(NSInteger num){
return num*currentNum;
};
NSInteger newNum = IntBlock(7);
定义可以修改变量的block:
__block NSInteger m = 50;//添加__block的定义,就可以在block的方法体内,修改变量m;如果不加__block的话,Xcode会提示m变量错误信息:Variable is not assing(missing __block type)
void(^sumMNBlock)(NSInteger) = ^(NSInteger n){
m = m + n;
NSLog(@"m和n的和为:%ld",x);
}
sumMNBlock(50);
2.定义在方法外部
在ViewDidLoad方法外部,定义一个参数,没有返回值的block
void(^ NoNumBlock)(NSInteger) = ^(NSInteger num){
NSLog(@"整数值为: %ld",num);
}
3.利用block实现两个页面之间的传值
以单个字符串为例,其他情况只需要改变参数类型即可:
传递值页面:ChuanzhiViewController
在.m文件中:定义block块
@property(nonatomic,copy)void(chuanzhiViewControllerBlock)(NSString *valueString);
在.h文件中:传值方法
if (self.nextViewControllerBlock) {
self.nextViewControllerBlock(valueString);
}
接收值页面:JieshouViewController
在页面跳转的时候:
JieshouViewController *VC = [JieshouViewController new];
VC.nextViewControllerBlock = ^(NSString *valueString){
NSLog(@"%@",valueString);
};
[self.navigationController pushViewController:VC animated:YES];
补充:快速敲block:inline——>回车
网友评论