1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 @end 6 7 @implementation ViewController 8 9 - (void)viewDidLoad { 10 [super viewDidLoad]; 11 //没有返回值 12 //[self testNoReturnValue]; 13 //[self testIntReturnValue]; 14 //[self testNSStringReturnValue]; 15 [self test]; 16 } 17 -(void)test 18 { 19 //1.没有返回值,参数为对象类型 20 void (^block1)(NSString *param) = ^(NSString *param){ 21 NSLog(@"%@",param); 22 }; 23 block1(@"test"); 24 25 //2.返回值为对象类型,两个基本类型的参数 26 NSString *(^block2)(int,int) = ^(int a,int b){ 27 return [NSString stringWithFormat:@"%d",a+b]; 28 }; 29 NSString *ret = block2(10,20); 30 NSLog(@"%@",ret); 31 } 32 33 //有返回值,返回值为对象类型(NSString) 34 -(void)testNSStringReturnValue 35 { 36 //1.没有参数 37 NSString *(^block1)(); 38 block1 = ^{ 39 return @"你好"; 40 }; 41 NSString *ret1 = block1(); 42 NSLog(@"%@",ret1); 43 44 //2.有一个参数,参数为基本类型 45 NSString *(^block2)(int); 46 block2 = ^(int age){ 47 return [NSString stringWithFormat:@"你今年%d岁",age]; 48 }; 49 NSString *ret2 = block2(10); 50 NSLog(@"%@",ret2); 51 52 //3.有一个参数,参数为对象类型 53 NSString *(^block3)(NSString *); 54 block3 = ^(NSString *name){ 55 return name; 56 }; 57 NSString *ret3 = block3(@"小明"); 58 NSLog(@"%@",ret3); 59 60 //4.有两个参数,参数都是对象类型 61 NSString *(^block4)(NSString *,NSString *); 62 block4 = ^(NSString *name1,NSString *name2){ 63 return [NSString stringWithFormat:@"%@,%@",name1,name2]; 64 }; 65 NSString *ret4 = block4(@"小明",@"小花"); 66 NSLog(@"%@",ret4); 67 } 68 //有返回值,返回值为基本类型 69 -(void)testIntReturnValue 70 { 71 //1.没有参数 72 int (^block1)(void); 73 block1 = ^{ 74 return 200; 75 }; 76 //使用 77 int ret1 = block1(); 78 NSLog(@"%d",ret1); 79 80 //2.有一个参数 81 int (^block2)(int); 82 block2 = ^(int age){ 83 return age; 84 }; 85 //使用 86 int ret2 = block2(50); 87 NSLog(@"%i",ret2); 88 89 //3.有一个参数,参数为对象类型 90 int (^block3)(NSString *); 91 block3 = ^(NSString *name){ 92 return (int)name.length; 93 }; 94 int ret3 = block3(@"hello world"); 95 NSLog(@"%d",ret3); 96 97 //4.有两个参数,两个对象类型 98 int (^block4)(NSString *,NSString *); 99 block4 = ^(NSString *name1,NSString *name2){ 100 return (int)(name1.length+name2.length); 101 }; 102 int ret4 = block4(@"hello",@"world"); 103 NSLog(@"%i",ret4); 104 } 105 106 //没有返回值的 107 -(void)testNoReturnValue 108 { 109 //1.没有参数 110 //声明 111 void (^block1)(void); 112 //赋值 113 block1 = ^{ 114 NSLog(@"void"); 115 }; 116 //使用 117 block1(); 118 119 //2.没有返回值参数是基本类型 120 //声明时的形参可以和赋值时不一样 121 void (^block2)(int pa); 122 //赋值 123 block2 = ^(int param){ 124 NSLog(@"param = %d",param); 125 }; 126 //使用 127 block2(100); 128 129 //3.有一个参数,参数是对象类型(NSString) 130 //声明 131 void (^block3)(NSString *); 132 //赋值 133 block3 = ^(NSString *name){ 134 NSLog(@"name = %@",name); 135 }; 136 //使用 137 block3(@"小明"); 138 139 //4.有两个参数,一个基本类型,一个对象类型 140 void (^block4)(int,NSString *); 141 block4 = ^(int age,NSString *name){ 142 NSLog(@"%@今年%d岁",name,age); 143 }; 144 //使用 145 block4(20,@"小明"); 146 } 147 148 - (void)didReceiveMemoryWarning { 149 [super didReceiveMemoryWarning]; 150 // Dispose of any resources that can be recreated. 151 } 152 153 @end