专栏名称: Adrenine
iOS开发
目录
相关文章推荐
51好读  ›  专栏  ›  Adrenine

Block入门(一) block的基本使用

Adrenine  · 掘金  ·  · 2017-12-13 08:46

正文

Block从入门(一):block的基本使用

iOS4.0开始,Block横空出世,自他出生开始,就深受Apple和开发者的喜爱.他其实就是c预言的补充,书面点说就是带有自动变量的匿名函数.其实很多初级开发者也很喜欢使用Block,第一呢感觉他很简洁,代码的可读性也高,第二确实无形中提升了代码的逼格,但是殊不知自己有很多循环引用的问题,所以说还是劝大家理解透彻了,再在项目中使用.

Block的格式

Block的基本类型

1.无参数无返回值
void(^tempBlock)() = ^(){
  NSLog(@"无参无返回值");
};
//调用
tempBlock();

2.无参数有返回值
int(^tempBlock)() = ^(){
  return 10;
};
//调用的时候,无论你输入的是什么都返回的是10;
tempBlock(100);

3.有参数无返回值
void(^tempBlock)(int) = ^(int temp){
  NSLog(@"有参数无返回值");
};

4.有参数有返回值
int(^tempBlock)(int) = ^(int number){ 
  return number; 
};
//输入多少打印就是多少
tempBlock(100);

Block的经典实用场景 1.修改外部变量

__block int x = 100;void(^sumXWithYBlock)(int) = ^(int y){ 
  x = x + y; 
  NSLog(@"new value %d",x); 
};
//打印的值就是x+y,100+100=200
sumXWithYBlock(100);

2.页面间的传值 1.在第二个页面(SecondViewController)首先声明一个属性

/**
先声明block的名字,并确定参数的类型
*/
@property(nonatomic,copy)void (^netViewBlock)(NSString *text);

2.在点击按钮返回的时候,往回传你需要传的参数,参数类型要一致

-(void)back{ 
  self.netViewBlock(@"你好"); 
  [self.navigationController popViewControllerAnimated:YES];
}

3.在第一页(FirstViewController),准备push进入下一页的时候,获取ViewController2的属性,并实现.

-(void)click:(UIButton *)sender{
  //把第二页的返回的值显示在label上 
  UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 100, 200, 30)]; 
  [self.view addSubview:label]; 
  SecViewController *vc = [[SecViewController alloc] init];
  vc.netViewBlock = ^(NSString *text){ 
    label.text = text; 
  };   
  [self.navigationController pushViewController:vc animated:YES];
}

3.自定义Block 例子:点击Button,需要改变Button的title实现:1.创建一个工具类,声明一个类方法,并自定义一个block,需要传title,所以传参类型是NSString







请到「今天看啥」查看全文