接口文件:Num.h
#import <Foundation/Foundation.h>
@interface Num : NSObject
typedef int (^Sub)(int,int);//在申明类时,申明一个Sub的block类型
- (int) add:(int)a andb:(int)b;
- (int) Sub:(int (^)(int,int)) sub andb:(Sub)sub1;//block作为方法的参数
@end
实现文件:Num.m
#import "Num.h"
@implementation Num
- (int) add:(int)a andb:(int)b
{
return a+b;
}
- (int) Sub:(int (^)(int,int)) sub andb:(Sub)sub1
{
return sub(10,20)+sub(20,30);//block在方法中使用
}
@end
测试文件:main.m
#import <Foundation/Foundation.h>
#import "Num.h"
typedef void (^BlockType)(void);//申明一个无参无返的block类型:BlockType
typedef int (^AddBlock)(int a,int b);//申明一个有两个整形参数和一个整形放回值的block类型:AddBlock
int main(int argc, const char * argv[]) {
@autoreleasepool {
void (^myBlock)(void) = ^void(void){//无参无返的block的定义与赋值
NSLog(@"这里是Block");
};
myBlock();//无参无返的block使用
BlockType block = ^void(void){//BlockType类型的block的定义与赋值
NSLog(@"***");
};
block();
int (^addBlock)(int,int) = ^int(int a,int b){//有两个整形参数和一个整形放回值的block的定义与赋值
return a+b;
};
AddBlock addblock = ^int(int a,int b){
return a+b;
};
NSLog(@"%i",addBlock(10,20));
NSLog(@"%i",addblock(20,30));
Num *num = [[Num alloc] init];
NSLog(@"%i",[num add:addblock(10,20) andb:addblock(20,30)]);//block作为函数的参数
int (^sub)(int,int) = ^int(int a,int b)
{
return a+b;
};
Sub sub1= ^int(int a,int b)
{
return a+b;
};
Num *num1 = [[Num alloc]init];
NSLog(@"%i",[num1 Sub:sub andb:sub1]);
}
return 0;
}