1.做参数

什么时候使用Block充当参数?

封装一个功能,这个功能做什么事情由外界决定,但是什么时候调用由内部决定,这时候就需要把Block充当参数去使用.

模拟需求:

封装一个计算器,怎么计算由外界决定,什么时候计算由内部决定

// 声明计算器类
@interface CaculatorManager : NSObject @property (nonatomic, assign) int result;
// 声明方法:参数为block类型
- (void)caculator:(int(^)(int result))caculatorBlock; @end
******************************************************
// 实现计算器类
@implementation CaculatorManager
// 实现方法
- (void)caculator:(int (^)(int))caculatorBlock
{
// 调用block
_result = caculatorBlock(_result);
}
******************************************************
// 使用计算器类
@implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// 创建类
CaculatorManager *mgr = [[CaculatorManager alloc] init];
// 使用方法,传入自定义的block
[mgr caculator:^(int result){
result += 5;
result *= 5;
return result;
}]; NSLog(@"%d",mgr.result);
}
@end

2.做返回值

模拟需求:

封装一个计算器,实现加法计算,在外部使用加法方法时可以实现链式编程。

// 声明计算器类
@interface CaculatorManager : NSObject @property (nonatomic, assign) int result;
// 声明加法方法:返回值为block类型
- (CaculatorManager *(^)(int))add; @end
******************************************************
// 实现计算器类
@implementation CaculatorManager
// 实现方法
- (CaculatorManager * (^)(int))add
{
// 返回加法计算的block,并且block的返回值为计算器类
return ^(int value){
_result += value;
return self;
};
}
******************************************************
// 使用计算器类
@implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// 创建类
CaculatorManager *mgr = [[CaculatorManager alloc] init];
// 使用链式编程的方式调用方法
mgr.add(5).add(6).add(7); NSLog(@"%d",mgr.result);
}
@end

 

block之---应用场景:做参数和返回值的更多相关文章

  1. python函数进阶(函数参数、返回值、递归函数)

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  2. python中函数的参数和返回值

    目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...

  3. 2. Bean Validation声明式校验方法的参数、返回值

    你必须非常努力,才能干起来毫不费力.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...

  4. java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)

    这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver  PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还 ...

  5. C#多线程函数如何传参数和返回值

          详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统.   C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...

  6. Android JNI 自定义对象为参数和返回值

    ndroid JNI 提供了很强大的支持,不仅可以采用基本类型做为参数和返回值,同时也支持自定义对象做为参数和返回值,以下举例说明. 一.定义作为输入和返回的自定义类 (仅提供两个简单类型和一个打印函 ...

  7. JS基础研语法---函数基础总结---定义、作用、参数、返回值、arguments伪数组、作用域、预解析

    函数: 把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用: 代码重用 函数的参数: 形参:函数定义的时候,函数名字后面的小括号里的变量 实参:函数调用的时候,函数名 ...

  8. day09-Python运维开发基础(函数收集参数、命名关键字参数与返回值、函数名的特殊使用及 全局/局部变量详解)

    1. 函数收集参数.命名关键字参数与返回值.函数名的特殊使用 # ### 默认形参 和 关键字实参 # 默认形参和 关键字实参 在写法上是一样 # 函数的定义处 """默 ...

  9. 匿名对象作为方法的参数和返回值与Random概念和基本使用

    应用场景 1. 创建匿名对象直接调用方法,没有变量名. new Scanner(System.in).nextInt(); 2. 一旦调用两次方法,就是创建了两个对象,造成浪费,请看如下代码. new ...

随机推荐

  1. margin负值布局(一)

    搜索关键词:margin  负-100% 链接地址: 负margin用法权威指南 负边距(negative margin)实现自适应的div左右排版 <div class="cont& ...

  2. *CCF 201612-2 工资计算(80)

    试题编号:201612-2 试题名称:工资计算 时间限制:1.0s 内存限制:256.0MB 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资.假设他一个月的税前工资 ...

  3. Struts2接受参数的几种类型和接受复杂类型参数(list<String>和list<Object>)

    Struts2接受参数的几种类型 大概有这几种类型: 1.使用Action的属性接受参数 在Action中加入成员变量,配置Getter和Setter方法,Getter而和Setter方法的名字和表单 ...

  4. bzoj1121

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1121 题解: 神题啊,妈的不会写的都去吃屎吧.

  5. 解决IE增强配置的问题

    windows2003上: win 2008上, 其实ie8就是在2008上的 为所有用户启用 IE ESC 关闭所有 Internet Explorer 的实例. 单击"开始", ...

  6. eclipse中创建类和方法自动注释

    <?xml version="1.0" encoding="UTF-8"?><templates><template autoin ...

  7. Angular - - $anchorScroll、$controller、$document

    $anchorScroll 根据HTML5的规则,当调用这个函数时,它检查当前的url的hash值并且滚动到相应的元素. 监听$location.hash()并且滚动到url指定的锚点的地方.可以通过 ...

  8. MYSQL外键的使用以及优缺点

    主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作, 矛盾焦点:数据库设计是否需要外键.这里有两个问题:一个是如何保证数据库数据的完整性和一致性:二是第一条对性能的影响. 正方观 ...

  9. js原生设计模式——2面向对象编程之js原生的链式调用

    技巧点:对象方法中返回当前对象就可以链式调用了,即方法中写return this; <!DOCTYPE html><html lang="en"><h ...

  10. SVG的Transform使用

    SVG的Transform使用: <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...