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——>回車