美文网首页
Block作为参数或返回值的理解与应用

Block作为参数或返回值的理解与应用

作者: qiuYang_HANABI | 来源:发表于2017-03-30 15:38 被阅读0次

    这篇文章主要是为了方便大家理解Block作为参数或返回值的情况,是我在学习链式编程时总结的,希望能帮到大家~

    Block作为返回值

    typedef NSString *(^NameBlock)(NSString *inputValue);
    
    @property(nonatomic, assign)NSInteger result;
    
    @property(nonatomic, copy)NameBlock nameBlock;
    

    在上面的代码中,NSInteger可以理解为调用result时的返回值类型,同样,调用nameBLock时返回值的数据类型也是NameBlock类型。

    调用result属性时其实是调用result的set/get方法,相替代的,我们也可以不去把result定义成一个属性,而是定义成一个返回值为NSInter的result方法,这样也能实现它作为属性时的功能:

    //声明(需要定义一个静态变量来存值static NSString *resultStr;)
    - (NSString *)result;
    
    - (NSString *)result:(NSString *)string;
    
    //实现
    - (NSString *)result{
    return resultStr;
    }
    
    - (NSString *)result:(NSString *)string{
    resultStr = string;
    return resultStr;
    }
    
    //调用
    [self result:@"233"];
    NSLog(@"%@", self.result);
    

    同理BLock也可以这么做(以get方法为例):

    - (NSString *(^)(NSString *))nameBlock; //nameBlock的get方法声明
    
    - (NSString *(^)(NSString *))nameBlock{ //实现
    return ^NSString *(NSString *inputValue){ //返回值为Block块
    return [inputValue stringByAppendingString:@"233"];//Block块内部的返回值,这个才是整个方法真正的返回值
    };
    }
    
    //调用
    NSLog(@"%@", self.nameBlock(@"123"));
    

    刚才的例子实现了nameBLock这个BLock块的get方法,其实也就是Block作为返回值的应用,只不过这样更好理解

    Block作为参数

    Block块作为参数时(Block块也有返回值):
    //声明
    - (void)inputTheBlock:(NSString *(^)(NSString *inputStr))nameBlock;
    
    //实现 - block内部
    - (void)inputTheBlock:(NSString *(^)(NSString *))nameBlock{
        NSString *inputStr = @"123";//想要传到外部的信息
        inputStr = nameBlock(inputStr);//将inputStr交给外部处理,然后将处理结果返回这里
        NSLog(@"%@", inputStr);//将处理过的inputStr输出
    }
    
    //调用 - block外部
        [self inputTheBlock:^NSString *(NSString *inputStr) {
            NSLog(@"接到的block的参数:%@", inputStr)
            //对inputStr进行处理
            inputStr = [inputStr stringByAppendingString:@"456"];//给inputStr添加字段
            return inputStr;//将处理好的inputStr返回
        }];
    

    以上就是我对Block做参数和返回值的一些理解,如有错漏,欢迎指点~

    相关文章

      网友评论

          本文标题:Block作为参数或返回值的理解与应用

          本文链接:https://www.haomeiwen.com/subject/cqcpottx.html