block之---应用场景:做参数和返回值
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之---应用场景:做参数和返回值的更多相关文章
- python函数进阶(函数参数、返回值、递归函数)
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
- 2. Bean Validation声明式校验方法的参数、返回值
你必须非常努力,才能干起来毫不费力.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...
- java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)
这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还 ...
- C#多线程函数如何传参数和返回值
详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统. C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...
- Android JNI 自定义对象为参数和返回值
ndroid JNI 提供了很强大的支持,不仅可以采用基本类型做为参数和返回值,同时也支持自定义对象做为参数和返回值,以下举例说明. 一.定义作为输入和返回的自定义类 (仅提供两个简单类型和一个打印函 ...
- JS基础研语法---函数基础总结---定义、作用、参数、返回值、arguments伪数组、作用域、预解析
函数: 把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用: 代码重用 函数的参数: 形参:函数定义的时候,函数名字后面的小括号里的变量 实参:函数调用的时候,函数名 ...
- day09-Python运维开发基础(函数收集参数、命名关键字参数与返回值、函数名的特殊使用及 全局/局部变量详解)
1. 函数收集参数.命名关键字参数与返回值.函数名的特殊使用 # ### 默认形参 和 关键字实参 # 默认形参和 关键字实参 在写法上是一样 # 函数的定义处 """默 ...
- 匿名对象作为方法的参数和返回值与Random概念和基本使用
应用场景 1. 创建匿名对象直接调用方法,没有变量名. new Scanner(System.in).nextInt(); 2. 一旦调用两次方法,就是创建了两个对象,造成浪费,请看如下代码. new ...
随机推荐
- Activiti----hellowWorld(使用H2数据库)
1.项目结构 2.pom <dependencies> <dependency> <groupId>junit</groupId> <artifa ...
- Android线程之基本用法
一: 在android中有两种实现线程thread的方法: 一种是,扩展java.lang.Thread类 另一种是,实现Runnable接口 二: Thread类代表线程类,它的两个最主要的方法是: ...
- 将ADS1.2的工程迁移到KEIL上-基于2440
裸机程序应该是一个很好的选择 1. 不拷贝启动代码,因为我们用自己的启动代码 2. 建立工程目录分级,建立完成后如下所示 拷贝相应代码到对应目录中 Option中拷贝 Core中拷贝 建立 ...
- CSS 弹性盒子布局
学习地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout
- [cocos2d-x] --- CCNode类详解
Email : awodefeng@163.com 1 CCNode是cocos2d-x中一个很重要的类,CCNode是场景.层.菜单.精灵等的父类.而我们在使用cocos2d-x时,接触最多的就是场 ...
- StackExchange.Redis 官方文档(二) Configuration
配置 有多种方式可以配置redis,StackExchange.Redis提供了一个丰富的配置模型,在执行Connect (or ConnectAsync) 时被调用: var conn = Conn ...
- java 读写excle
2014-04-16 20:38:20 java读写excel 晚上打算研究如何c来编写
- 拓扑排序(Topological)
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<stack&g ...
- 【转】java调用存储过程和函数
一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...
- java 之 Spring
1.Spring 介绍 2.Spring 下载 3.Spring 导入 4.Spring 配置