iOS Block 基本使用

来源:互联网 发布:js 图片点击查看大图 编辑:程序博客网 时间:2024/06/04 18:40

此文章仅做个人笔记
block是一个数据类型, 多用于参数传递, 代替代理方法, (有多个参数需要传递或者多个代理方法需要实现还是推荐使用代理方法), 少用于当做返回值传递。
block是一个OC对象, 它的功能是保存代码片段, 预先准备好代码, 并在需要的时候执行。
block分为三类:
1.无参数,无返回值

//定义无参无返回值的Block   void (^printBlock)() = ^(){      printf("no number");         };    printBlock();
2.有参数,无返回值
//定义一个有参数,没有返回值的Blockvoid (^printNumBlock)(int) = ^(int num){    printf("int number is %d",num);};
3.有参数,有返回值
//定义名为myBlock的代码块,返回值类型为int    int (^myBlock)(int) = ^(int num){        return num*mutiplier;    }    //使用定义的myBlock    int newMutiplier = myBlock(3);

对于block,我们常用来进行反向传值
需求:有一个页面V1, 点击一个按钮push到页面V2,在V2中输入多个文本存放到dictionary中,点击V2的确定按钮回到V1,并把dictionary传给V1页面。
V2.h中的代码

#import <UIKit/UIKit.h>@interface V1ViewController : UIViewController/* 定义了一个addApplyDetail的block。 * 这个block必须带一个可变字典类型的参数 * 无返回值 */typedef void(^addApplyDetail)(NSMutableDictionary *dict);//用上面定义的addApplyDetail 声明一个block ,声明的合格block必须遵守声明的要求@property (nonatomic,copy) addApplyDetail applyDetail;@end

V2.m中的代码
1.将输入的多个文本存放到字典当中

- (void)textFieldDidEndEditing:(UITextField *)textField {    NSString *text = textField.text;   NSString *textIndexPath = [NSString stringWithFormat:@"%ld",(long)textField.tag];    [self.textDict setObject:text forKey:textIndexPath];}

2.点击确定按钮传值

- (void)SureBtnClick {    [self.view resignFirstResponder];    self.applyDetail(self.textDict);    [self.navigationController popViewControllerAnimated:YES];}

V1中的代码

- (void)AddBtnClick {    ApplyDetailViewController *applyDetail = [[ApplyDetailViewController alloc]init];    applyDetail.applyDetail = ^(NSMutableDictionary *dict){        [self.applyArray addObject:dict];        [self.tableView reloadData];    };    [self.navigationController pushViewController:applyDetail animated:YES];}
1 0
原创粉丝点击