美文网首页
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作为参数或返回值的理解与应用

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

  • block常见用法整理(译)

    1.作为本地变量的block: 返回值类型 ^(block名称 (参数类型) = ^返回值类型(参数) {bloc...

  • block作为属性,作为参数,作为返回值各种情况演示

    block作为属性,作为参数,作为返回值各种情况演示

  • Block

    block声明 返回值 (^block名称)(参数列表); //参数列表无为void block定义 返回值(可省...

  • Block和协议

    1、block 1.1 block的基本定义(无参数无返回值的、有参数无返回值的、有参数有返回值的)1.2 inl...

  • iOS链式函数式响应式编程

    iOS链式,函数式,响应式编程 block表达式语法: 作为函数参数的语法 定义block简写 作为返回值的语法 ...

  • 深究Block的实现

    先看一下Block使用的语法 声明一个block返回值 (^名称)(参数列表) = ^(参数列表){}; 作为一个...

  • 初学block(一)

    block语法:返回值类型 (^block名称)(参数名1 参数,参数名2 参数, ...) = ^(参数名1 参...

  • 3.2高阶函数

    资料整理:JavaScript设计模式与开发实践 高阶函数:函数可以作为参数被传递或作为返回值输出。 函数作为参数...

  • IOS中的 Block 初步了解

    对于Block的理解 block是对象,它封装了一段代码,这段代码可以在任何时候执行。block可以作为函数参数或...

网友评论

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

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