Block传值

iOS传值一共有四种:属性传值,代理传值,通知传值以及Block传值;

今天我们来说一下Block传值:

概念:带有自动变量的匿名函数


语法:

“^”这个符号表示这是一个Block

Block中不可以对C语言数组进行操作


用途:

传值


模式

无参数无返回值的Block

无参数有返回值的Block

有参数无返回值的Block

有参数有返回值的Block


block的代码是内联的,效率高于函数调用

block对于外部变量默认是只读属性

block被Objective-C看成是对象处理


(1)在类中,定义一个Block变量,就像定义一个函数;

(2)Block可以定义在方法内部,也可以定义在方法外部;

(3)只有调用Block时候,才会执行其{}体内的代码;


下面就直奔主题吧---传值

1、传值方
//.h 文件/**

*  类型自定义

*/typedefvoid(^ReturnValueBlock) (NSString*strValue);@interfaceNextViewController:UIViewController/**

*  声明一个ReturnValueBlock属性,这个Block是获取传值的界面传进来的

*/@property(nonatomic,copy) ReturnValueBlock returnValueBlock;

@end

=================================================================


//.m 文件

#import"NextViewController.h"

@interfaceNextViewController()

@property(weak,nonatomic)IBOutletUITextField*inputText;

- (IBAction)back:(id)sender;

@end

@implementationNextViewController

- (void)viewDidLoad {   

[superviewDidLoad];

self.navigationItem.title =@"第二个界面";

}

/**

*  返回上一个界面

*

*  @param sender 按钮

*/

- (IBAction)back:(id)sender {

NSString*inputString =self.inputText.text;

if(self.returnValueBlock) {

//将自己的值传出去,完成传值

self.returnValueBlock(inputString);   

}   

[self.navigationController popViewControllerAnimated:YES];

}

@end

2、捕获方

//.m 文件#import"ViewController.h"

#import"NextViewController.h"

@interfaceViewController()

@property(weak,nonatomic)IBOutletUILabel*nextPassedValue;

- (IBAction)next:(id)sender;@end

@implementationViewController

- (void)viewDidLoad {

[superviewDidLoad];}

//点击按钮跳转到第二个界面

- (IBAction)next:(id)sender

{    NextViewController *nvc = [[NextViewController alloc]init];

//赋值Block,并将捕获的值赋值给

UILabelnvc.returnValueBlock = ^(NSString*passedValue){self.nextPassedValue.text = passedValue;    }; 

  [self.navigationController pushViewController:nvc animated:YES];

}@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容