Block详情

  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

 

posted on 2015-09-07 15:07  Baymax01  阅读(129)  评论(0编辑  收藏  举报

导航