ios 开发中 怎么使用block 代替代理方法

2025-05-17 07:10:28
推荐回答(2个)
回答1:

  1. 声明一个无返回值的block 

typedef void(^onSearch)(NSString *searchText); ////////onSearch 就是这个block的函数指针

2.在控制器中头文件.h中定义block,分两步:

<1>定义成属性 

@property (nonatomic)  onSearch searchBlock;

<2>定义一个block的setter方法

-(void)setSearchBlock:(void(^)(NSString *searchText)) block;

3.在控制器的实现文件.m中来实现

-(void)setSearchBlock:(void(^)(NSString *searchText)) block {
        if (block) {
                 self.searchBlock = block;
        }
}

4.在控制器中使用block实现回调. 当点击search按钮时,将search的文本传递给订阅者

-(void)searchHandler:(id)sender {
       if (self.searchBlock) {
                self.searchBlock(@"your search keyword")
        }
}

5.在订阅者中,接收过来的参数,并做其它操作

YourVC  *vc = [YourVC new];
[vc setSearchBlock:^(NSString *searchText) {
             NSLog(@"get search keyword")       
 }]

回答2:

  1. 定义函数的时候,将最后一个参数类型设置成一个方法(例如func   abc(handler:(str:String)->Void){  handler("haha")  }

  2. 调用的时候就可以传block(例如abc({(str:String) in  NSLog(str);});

  3. 预计会在控制台输出haha